我在折叠函数中使用累加器。我想更改累加器的值。

我的函数看起来像这样:

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/

10-09 04:38