我正在尝试计算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;
}
}
}
答案 0 :(得分:0)
您可以使用使Tuple2保持键控状态的RichMap(或RichFlatMap)。您需要将每个传入记录添加到状态,并发出平均值作为输出。
CountWindowAverage example in the docs的功能类似,但更为复杂。