gpt4 book ai didi

python - 如何避免pyspark中join操作的过度shuffle?

转载 作者:行者123 更新时间:2023-12-03 21:14:26 25 4
gpt4 key购买 nike

我有一个大小约为 25 GB 的大型 spark 数据帧,我必须将它与另一个大小约为 15 GB 的数据帧连接起来。

现在,当我运行代码时,大约需要 15 分钟才能完成

资源分配是
40 个执行器,每个执行器具有 128 GB 内存

当我查看它的执行计划时,正在执行排序合并连接。

问题是:

连接在相同的键但不同的表上执行大约 5 到 6 次,因为在为执行的每个连接合并/连接数据之前,它花费了大部分时间对数据进行排序和共同定位分区。

那么有没有什么方法可以在执行连接之前对数据进行排序,以便不对每个连接执行排序操作,或者以减少排序时间和实际连接数据的时间更多的方式进行优化?

我只想在执行连接之前对我的数据框进行排序,但不知道该怎么做?

例如:

如果我的数据框加入 id 列

joined_df = df1.join(df2,df1.id==df2.id)

如何在加入之前根据“id”对数据帧进行排序,以便分区位于同一位置?

最佳答案

So is there any way to sort the data before performing the join so that the sort operation is not performed for each join or optimized in such a way that it takes less time sorting and more time actually joining the data?



那闻起来像桶。

分桶是一种优化技术,它使用桶(和分桶列)来确定数据分区并避免数据混洗。

想法是到 bucketBy数据集,以便 Spark 知道键位于同一位置(已预先混洗)。参与 join 的 DataFrame 的桶数和桶数列必须相同。

请注意,这支持 Hive 或 Spark 表 ( saveAsTable ),因为存储桶元数据是从元存储(Spark 或 Hive 的)获取的。

关于python - 如何避免pyspark中join操作的过度shuffle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61728334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com