【问题标题】:Spark - How to re-partition dataframe on basis of columns with minimum shuffle?Spark - 如何根据最小洗牌的列重新分区数据帧?
【发布时间】:2019-07-01 22:38:55
【问题描述】:

我们有多个数据框。

其中一个数据框是主数据框,它使用左外连接与其他数据框连接。 所有这些数据框都连接在 4 列上(比如 col1、col2、col3、col4)。

为了减少数据混洗,目前我们正在重新分区 4 个连接列上的所有数据帧,然后连接这些数据帧(左外)。

有没有更好的方法来加入/重新分区这些数据帧,以使数据洗牌最少?

谢谢

【问题讨论】:

    标签: apache-spark apache-spark-sql


    【解决方案1】:

    重新分区不会避免洗牌,它会优化连接。如果您的两个数据框都很大并且不够小以适合广播哈希连接的内存..您可以将您的数据框保存为分桶表,然后可以执行排序合并连接。这样,您可以跳过通常在加入两个大数据帧之前发生的排序阶段 shuffle。请参阅下面的链接Spark join *without* shuffle 这种技术仅在您必须多次加入相同的数据帧时才有用。因为对这些表进行分桶也会导致Spark 应用程序的一些开销。

    【讨论】:

      【解决方案2】:

      我的帖子回复晚了。 我们最终使用了广播。

      我们从两个数据帧中删除了重新分区,并广播了较小的数据帧。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-25
        • 2020-03-20
        • 2016-04-29
        • 1970-01-01
        • 2018-11-11
        • 2021-04-23
        相关资源
        最近更新 更多