首页 > 解决方案 > Spark >2 - 连接操作期间的自定义分区键

问题描述

我想知道我们是否可以强制 Spark 在使用两个数据帧的连接操作期间使用自定义分区键。

例如,让我们考虑

df1: DataFrame - [groupid, other_column_a]
df2: DataFrame - [groupid, other_column_b]

如果我跑

df_join = df1.join(df2, "groupid")

Spark 会将“groupid”设置为分区键,并在每个分区上执行连接。问题是,如果分区太大,这可能会耗尽机器上的内存。

但是,理论上似乎可以使用 say(groupid, other_column_a)作为分区键执行连接(以减小每个分区的大小)。

可以用 Spark 做到这一点吗?我试图 df1.repartition("group_id","other_column_a")预先做,但这被连接覆盖(我用 来检查它df_join.explain())。我在网上找不到任何解释如何执行此操作的资源。

谢谢!

视觉解释

标签: apache-sparkjoinapache-spark-sql

解决方案


如果你要加入一些我想要的整数列,你可以对你的数据框进行分区,我会以一些数字为模..即你想要多少个分区..这样共享一些公共哈希值的 id 将被组合在一起一个分区..然后你可以通过分解多个连接来执行你的连接..在一个循环中连续连接每个分区..我已经详细解释了这个案例..高效的pyspark连接


推荐阅读