我们有一个大型数据集,需要分成1,000个单独的文件,我们想要使用的最简单的实现是应用PartitionFn,给定数据集的元素,它返回1到1,000之间的随机整数。 这种方法的问题是它最终创建了1,000个PCollections并且管道没有启动,因为似乎对“步骤”的数量有一个硬性限制。 (对应于执行图中作业监控UI上显示的框)。
有没有办法增加这个限制(限制是多少)?
我们用于解决此问题的解决方案是首先将数据划分为较小的子集(比如50个子集),并且对于每个子集,我们运行另一层分区管道以生成每个子集的20个子集(因此最终结果是1000个子集),但如果我们可以避免这个额外的层(最终创建1 + 50个管道,并导致编写和读取中间数据的额外成本),它会很好。
答案 0 :(得分:1)
考虑使用以下任一方法,而不是使用Partition
转换并在管道中引入许多步骤:
TextIO
有withNumShards方法。如果传递1000,它将在指定目录中生成1000个单独的分片。GroupByKey
+ a DoFn
来编写结果。