为高效的左连接划分大型数据帧?

时间:2018-02-20 21:10:45

标签: scala apache-spark dataframe left-join

我有两个具有相同结构的大型数据帧,大致相同的数据量,我还要加入它们以确定一个DF中是否缺少任何行而不是另一个DF。数据帧足够大(高达8000万行,或~40Gb),使广播连接不是一个选项。丢失行的数量通常很小,最坏情况下最多可达10K。连接是一个表达式超过2-4列(两侧都相同),形式为concat(coalesce(colA, ""), "|", coalesce(colB, ""), "|", coalesce(colC, "")),因为一些键列可能为NULL。

我们正在考虑使用分区(在连接之前或之后),因为连接引起的混乱似乎会导致我们的生产环境中的低性能。为高效的左连接分区数据帧的推荐方法是什么?

1 个答案:

答案 0 :(得分:2)

首先,如果join操作将多次执行而不更改,则分区可以提高join操作 的性能至少一个DataFrame。

已经提供了类似的答案this - 在一次性join之前使用分区只会导致在不同的地方进行随机播放。

join之后使用分区不会产生任何积极影响。

join操作主题的分区效果也在第{61页的Digital Oceans 一书中解释。