根据 flink 流媒体文档:窗口函数可以是 ReduceFunction、FoldFunction 或 WindowFunction 之一。前两个可以更有效地执行(参见状态大小部分),因为 Flink 可以在每个窗口的元素到达时增量聚合它们。这同样适用于批处理模式吗?在下面的示例中,我正在从 cassandra 读取 ~36go 的数据,但我希望减少的输出要小得多(~0.5go)。运行此作业是否需要 flink 将整个输入存储在内存中,或者它是否足够智能以对其进行迭代DataSet<MyRecord> input = ...;
DataSet<MyRecord> sampled = input
.groupBy(MyRecord::getSampleKey)
.reduce(MyRecord::keepLast);
1 回答
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
根据有关Flink 中的 Reduce 操作的文档,我看到以下内容:
应用于分组数据集的 Reduce 转换使用用户定义的 reduce 函数将每个组减少为单个元素。对于每组输入元素,reduce 函数将成对的元素连续组合成一个元素,直到每组只剩下一个元素。
请注意,对于 ReduceFunction,返回对象的键控字段应与输入值匹配。这是因为reduce 是隐式可组合的,并且从组合运算符发出的对象在传递给reduce 运算符时再次按键分组。
如果我没看错,Flink在映射器端执行 reduce 操作,然后在reducer端再次执行,因此实际发出/序列化的数据应该很小。
添加回答
举报
0/150
提交
取消