数据流GroupByKey和CoGroupByKey非常慢

时间:2018-09-07 20:32:37

标签: google-cloud-platform google-cloud-dataflow

数据流非常适合具有简单转换的管道,但是当我们进行复杂的转换(例如联接)时,性能确实很差。

1 个答案:

答案 0 :(得分:0)

我写了这个问题自己回答。

引擎盖下发生了什么事

  • 通过PCollection(可序列化对象)之间的数据流传输的发送数据可能不存在于单个计算机中。此外,类似GroupByKey / CoGroupByKey的转换需要将所有数据收集在一个位置,然后再填充结果。
  • 最近,我正在处理具有970列信息的巨大数据集。现在这些数据已经很大了(大约300 GB的PCollecction)。在我的用例中,我不得不将此信息与另一个带有CoGroupByKey的PCollection(5列的PCollecction)一起使用,当数据按原样传递时,花了数小时才能准备好数据它甚至可以执行分组操作。

解决方法

  • 减小行的大小,这样您就只有要查询的信息才能加入集合

例如,如果左侧集合中有1个键列,而右侧集合中需要1个值列,则仅将这些信息传递给CoGroupByKey转换。虽然这确实会导致原始集合的数据丢失,但是您将创建一个查找集合,其中包含基于KV的所需信息。

然后,您可以使用DoFn遍历数据,重建密钥并从作为侧面输入传递的Map中的数据中获取数据。

这种方法给出了惊人的结果,它使我能够在5分钟内加入上述数据。