[英]How to perform average operation on DataStream in Apache Flink using Java
我正在尝试计算Flink中输入数据流的平均值(无窗口)
我已经使用了一个映射器将流从(key,value)更改为(key,value,1)
现在,我需要在第二和第三字段上求和,并将它们彼此除。
输入数据流来自套接字连接,格式为“ X 5”,形式为“键值”
public class AvgViews {
DataStream<Tuple2<String, Double>> AvgViewStream = dataStream
.map(new AvgViews.RowSplitter())
.keyBy(0)
//.???
public static class RowSplitter implements
MapFunction<String, Tuple3<String, Double, Integer>> {
public Tuple3<String, Double, Integer> map(String row)
throws Exception {
String[] fields = row.split(" ");
if (fields.length == 2) {
return new Tuple3<String, Double, Integer>(
fields[0],
Double.parseDouble(fields[1]),
1);
}
return null;
}
}
}
您可以使用使Tuple2保持键控状态的RichMap(或RichFlatMap)。 您需要将每个传入记录添加到状态,并发出平均值作为输出。
文档中的CountWindowAverage示例执行了类似的操作,尽管稍微复杂一些。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.