【问题标题】:spark join operation for two data frame两个数据帧的火花连接操作
【发布时间】:2020-01-21 05:54:44
【问题描述】:

当 df1 和 df2 具有相同的行并且
df1 和 df2 没有重复值
连接操作 df1.join(df2) 的复杂度是多少?
我的问题是取 O(n^2)

是否可以对数据框进行排序并使其性能更好? 如果不是让我的 pyspark 更快加入的方法是什么?

【问题讨论】:

    标签: pyspark pyspark-dataframes


    【解决方案1】:

    即使 df1 和 df2 具有相同的行集并且如果它们没有分区,为了连接它们,spark 必须在连接键上对两个数据帧进行分区。对于 spark 2.3 及更高版本,sort-merge 连接默认连接主力,这将需要对数据帧进行分区和按连接键排序,然后执行连接。两个数据框也必须位于同一位置以进行排序合并连接。

    是否可以对数据框进行排序并使其性能更好?如果不是让我的 pyspark 更快加入的方法是什么?

    是的,如果您发现某个特定的数据框在使用相同的连接键的连接中一次又一次地使用,那么您可以在连接键上重新分区数据框并将其缓存以供进一步使用。详情请参考以下链接

    https://deepsense.ai/optimize-spark-with-distribute-by-and-cluster-by/

    【讨论】:

    • 是 shuffle hash join 是默认的 pyspark join 吗?
    • 不再是了。从 Spark2.3 开始,排序合并连接是默认连接,因为连接键是可排序的。
    • @dailygirlflower 请接受答案或让我知道是否需要更多详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2018-11-08
    • 2017-05-24
    • 2019-03-24
    相关资源
    最近更新 更多