【发布时间】:2018-07-31 08:19:14
【问题描述】:
我有两个结构相同且数据量大致相同的大型数据框,我将它们左连接以确定一个 DF 中是否缺少任何行,而另一个则没有。数据帧足够大(最多 8000 万行,或 ~40Gb),使得广播连接不是一个选项。丢失的行数通常很少,最坏的情况下最多为 10K。连接是基于 2-4 列(两边相同)的表达式,格式为 concat(coalesce(colA, ""), "|", coalesce(colB, ""), "|", coalesce(colC, "")),因为某些键列可以为 NULL。
我们正在考虑使用分区(在联接之前或之后),因为联接引起的 shuffle 似乎会在我们的生产环境中导致性能下降。对数据帧进行分区以实现高效左连接的推荐方法是什么?
【问题讨论】:
-
使用多个子句进行连接(而不是连接所有内容)并按该顺序基于列进行分区可能会给您带来良好的性能提升。
-
另外,您是否考虑过使用布隆过滤器或类似的东西?
标签: scala apache-spark dataframe left-join