【发布时间】:2020-05-11 11:13:11
【问题描述】:
我有一个大小约为 25 GB 的大型 spark 数据帧,我必须与另一个大小约为 15 GB 的数据帧连接。
现在,当我运行代码时,大约需要 15 分钟才能完成
资源分配是 40 个执行器,每个 128 GB 内存
当我完成它的执行计划时,正在执行排序合并连接。
问题是:
在相同的键但不同的表上执行连接大约 5 到 6 次,因为在为每个执行的连接合并/连接数据之前,它花费了大部分时间对数据进行排序和共同定位分区。
那么有没有办法在执行连接之前对数据进行排序,从而不对每个连接执行排序操作,或者以这样的方式进行优化,以减少排序时间和实际连接数据的时间?
我只想在执行连接之前对我的数据框进行排序,但不知道该怎么做?
例如:
如果我的数据框加入 id 列
joined_df = df1.join(df2,df1.id==df2.id)
如何在加入之前根据“id”对数据帧进行排序,以便分区位于同一位置?
【问题讨论】:
-
stackoverflow.com/questions/42985178/… 您可以将它们转换为 rdd,然后在进行连接之前使用相同的分区器。
标签: python apache-spark pyspark apache-spark-sql