我正在尝试计算 Flink 中输入数据流(无窗口(的平均值
我使用映射器将流从(键,值(更改为(键,值,1(
现在我需要对第 2 和第 3 字段求和并将它们除以彼此。
输入数据流来自套接字连接,形式为"键值",如"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;
}
}
}
您可以使用 RichMap(或 RichFlatMap(来保持 Tuple2 处于键控状态。您需要将每个传入记录添加到状态,并发出平均值作为输出。
文档中的 CountWindowAverage 示例执行类似操作,但稍微复杂一些。