太多的步骤'执行管道时

时间:2016-12-02 21:19:00

标签: google-cloud-dataflow

我们有一个大型数据集,需要分成1,000个单独的文件,我们想要使用的最简单的实现是应用PartitionFn,给定数据集的元素,它返回1到1,000之间的随机整数。 这种方法的问题是它最终创建了1,000个PCollections并且管道没有启动,因为似乎对“步骤”的数量有一个硬性限制。 (对应于执行图中作业监控UI上显示的框)。

有没有办法增加这个限制(限制是多少)?

我们用于解决此问题的解决方案是首先将数据划分为较小的子集(比如50个子集),并且对于每个子集,我们运行另一层分区管道以生成每个子集的20个子集(因此最终结果是1000个子集),但如果我们可以避免这个额外的层(最终创建1 + 50个管道,并导致编写和读取中间数据的额外成本),它会很好。

1 个答案:

答案 0 :(得分:1)

考虑使用以下任一方法,而不是使用Partition转换并在管道中引入许多步骤:

  1. 许多接收器支持指定输出分片数量的选项。例如,TextIOwithNumShards方法。如果传递1000,它将在指定目录中生成1000个单独的分片。
  2. 使用分片编号作为密钥,并使用GroupByKey + a DoFn来编写结果。