我在折叠函数中使用累加器。我想更改累加器的值。
我的函数看起来像这样:
public Tuple2<String, Long> fold(Tuple2<String, Long> acc, eventClass event)
{
acc._1 = event.getUser();
acc._2 += event.getOtherThing();
return acc
}
对我来说,这应该是有效的,因为我要做的就是更改累加器的值。但是我得到的是
Cannot assign value to final variable _1
。与_2
相同。为什么acc
的这些属性是final?如何为它们分配值?快速编辑:
我可以做到的是让我生锈,而不是返回一个新的元组,但这在我看来这不是一个很好的解决方案
return new Tuple2<String, Long>(event.getUser(), acc._2 + event.getOtherThing());
flink框架的解决方案:
使用flink中定义的Tuple2。使用导入
import org.apache.flink.api.java.tuple.Tuple2;
然后与
acc.f0 = event.getUser();
acc.f1 += event.getByteDiff();
return acc;
最佳答案
我不知道您正在使用哪个Tuple2
。如何返回一个新对象:
Tuple2<String, Long> tuple = new Tuple2<String, Long>();
tuple._1 = event.getUser();
tuple._2 = event.getOtherThing() + acc._2;
return tuple;
关于java - 如何在Java中将值修改为Tuple2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54268139/