Apache flink 弗林克-如何同时计算总和和平均数?

Apache flink 弗林克-如何同时计算总和和平均数?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,Flink(批处理/流式处理)中是否有一种方法可以同时计算字段的平均值和总和?使用聚合方法,我可以计算groupBy结果中字段的和,但如何同时计算平均值呢?下面是示例代码 ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); DataSet<Tuple3<String,Integer,Double>> source = env.readCsvFile(Pat

Flink(批处理/流式处理)中是否有一种方法可以同时计算字段的平均值和总和?使用聚合方法,我可以计算groupBy结果中字段的和,但如何同时计算平均值呢?下面是示例代码

ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
DataSet<Tuple3<String,Integer,Double>> source = 
         env.readCsvFile(PathConfig.LINEITEM_1)
         .fieldDelimiter("|")
         types(String.class, Integer.class, Double.class);

source.groupBy(0,1).aggregate(Aggregations.SUM, 2);
//average of field 2???
ExecutionEnvironment env=ExecutionEnvironment.getExecutionEnvironment();
数据集源=
env.readCsvFile(PathConfig.LINEITEM_1)
.fieldDelimiter(“|”)
类型(String.class、Integer.class、Double.class);
来源:groupBy(0,1).聚合(Aggregations.SUM,2);
//字段2的平均值???

对于CSV解析、分组和聚合等简单任务,我建议使用Flink的


如果您想使用更多的低级API,可以实现一个求和/计数(直到迭代器没有更多元素)的函数,并在最后生成一个最终平均值。

我不确定是否使用表API,因为它似乎有很多限制(比如流表没有连接)。我只是想知道是否有一种容易计算平均值的方法,因为它应该只是一个简单的聚合函数,对吗?我在旧的源代码中看到,确实存在一个平均聚合函数,但在新版本中它被注释掉了,我想知道为什么……是的,它有局限性,但由于您可以在数据流和表之间来回切换,它是一个非常有用的工具。另请参见:平均似乎很容易,但它需要两个操作(聚合步骤和最终的除法映射),返回类型取决于输入。最好让用户实现他/她所需要的。你能使用map/reduce而不是aggregate吗?我可以使用reduceGroup手动计算总和和平均数,但既然已经有了一个很好的聚合总和函数,我想也许还有一种方法可以自动计算平均数。