当前位置: 首页 > 知识库问答 >
问题:

Apache Flink-DataSet API-如何将n个结果组合在一起

韩照
2023-03-14

我们正在使用Apache Flink(1.4.2)进行批处理,出于性能原因,我们希望在输出前将100个项目分组,而不是直接输出每个项目。

如果我们要使用DataStream API,我们将能够使用类似翻转窗口的东西(https://ci.apache.org/projects/flink/flink-docs-release-1.5/dev/stream/operators/windows.html#tumbling-windows)

但这在执行批处理时不可用。

是否可以使用数据集Api,或者通过某个group/reduce函数来实现这一点?

共有1个答案

锺英彦
2023-03-14

如果记录可以任意批处理在一起,我不会使用groupBy减少groupReduce,因为它们会不必要地对DataSet进行洗牌和排序。

相反,您可以使用MapPartitionFunction将记录批处理在一起。映射分区(MapPartition)接收对分区所有记录的迭代器,并可以通过收集器发出记录。由于它只消耗记录而不重新组织记录(无序、排序),因此非常有效。

 类似资料:
  • Usecase:使用EventTime并从Kafka的记录中提取时间戳。 我想要的是:Flink提取时间戳并在初始间隔(例如20秒)内为每条记录发出水印,然后它可以周期性地发出水印(例如每10秒)。 原因:如果我使用PeriodicWatermark,开始时Flink只会在一段时间间隔后发出水印,并且我的第一个窗口(5分钟)中的计数是错误的-比后续窗口中的计数大得多。我有一个解决办法,将自动水印间

  • 问题内容: 如何将2个查询的结果按日期排序? table1,table2具有相同的字段: PS:顺便说一句,标签是 问题答案: 您可以用来从两个表中获取行: 您可能还需要考虑重组数据库,以便代替使用两个表,而只使用一个表和一个字段来区分每一行的类型。然后,查询可以简化为:

  • 问题内容: 有没有一种快速的方法来将一个数组的值组合为另一个数组的键? 输入: 预期产量: 我该怎么办? 问题答案: 会完全按照您的意愿做。 引用手册: 通过将keys数组中的值用作键,并将values数组中的值用作对应值来创建数组。 对于您的情况,您必须执行以下操作: 当然,您也可以使用各种循环组合来做到这一点,这可能是最简单的解决方案。

  • 我不熟悉Mongo中的聚合查询,并且一直在努力产生我想要的输出。我有以下聚合查询: 返回以下结果: 如何修改聚合查询,以便只返回2个文档而不是3个文档?将两个“ABC-123”结果合并为一个结果,并使用带有“bu”和“count”字段的新计数数组,即。 非常感谢

  • 问题内容: 我有两个查询,每个查询返回一个结果,即一个数字 结果 。 结果 我希望将两个结果合并为一行记录,即 问题答案: 您可以使用: 说明:您可以在select语句中选择单个值作为字段,因此可以编写如下内容: 这仅对 标量 查询有效 ,这意味着子查询应具有精确的1列,最多1行。如果有0行,则ValueFromY将返回,而如果有1行以上,则查询将失败。 (在SQL Server,MySQL和其他

  • 我有一个工作良好的JSF片段。单击commandbutton时,它应该通过重定向到自身来重新加载页面。 我得到的错误是 javax.el.elException:不是有效的方法表达式:#{redirectTo}(位于com.sun.el.lang.expressionBuilder.CreateMethodExpression(ExpressionBuilder.java:311)(位于com.s