2017-10-09 69 views
1

我想知道为什么Dataflow不支持像Apache Spark那样的“SortByKey”。为什么Dataflow不支持SortByKey?

我在BigQuery中有一个巨大的表,我无法对它进行排序,因为“Order By”不可伸缩。所以,我正在考虑将BigQuery的输出移到Dataflow并在那里排序。但是,没有SortByKey,我似乎必须编写一个组合器。

任何建议,将不胜感激。

回答

1

排序(特别是按键)需要全局串行处理,这不是一个可伸缩的操作。 Apache Beam/Dataflow不提供这种支持,因为它经常是不必要的。

有多种替代方案可以更加可扩展地满足需求。例如,您可以对每个键中的值进行排序,这允许并行处理每个键。另一种常见的用例是全球或每个密钥的TopN。同样,这可以比实际排序更有效地得到支持。

您能详细说明您需要进行排序吗?为什么?这将有可能确定在Beam和Dataflow SDK中实现这些选项的选项。

+0

谢谢本。我有一个未分类的VCF(变体呼叫格式)文件。 KV ,对象>>。对我来说这是一个稀疏矩阵。我试图在几个子查询(例如,每个染色体)之间对表格进行分区,但由于其高成本,我更愿意避免使用BigQuery。你有什么建议? – AmirCS

+0

你可以更新你的问题来解释你需要排序和什么?根据你的描述,你不清楚你需要什么样的分类。例如,你似乎不应该需要全局排序。如果您将它更改为'KV >',并在每个'ChromosomeID'中将它们按“Start”排序,则不需要全局排序 - 只需在每个键中进行排序即可。 –

+0

对不起,当然。你可以假设<染色体,开始>是主键。你的意思是groupByKey <染色体ID>,然后根据开始进行排序。但是,恐怕每个小组都可能不适合记忆。 – AmirCS