假设我有一系列连接在一起的数据帧,它们的列集略有不同
df1.join(df2, Seq("order_id", "customer_id"))
.join(df3, Seq("order_id"))
.join(df3, Seq("order_id", "month"))
...所有的连接都包含order_id,但有些连接也包含其他列。
现在,如果order_id比其他列的基数高得多,那么有意义的做法是在order_id上对所有内容进行分区,这样我们就不会在customer_id和month的不同组合上打乱其他结果。
有没有办法让Spark把所有的分区都单独放在customer_id上?
发布于 2021-09-03 18:53:47
与以下内容相关:
有没有办法让
把所有的分区都单独放在
customer_id上?
不,没有,那不是Spark的工作方式。基本上,join的左侧和右侧需要使用相同的分区工具进行(重新)分区,并在多组join中完成。
运行一个.explain将会揭示这一点。它不是ORACLE数据库。
这里有一个关于连接和混洗效果的很好的读物:https://towardsdatascience.com/the-art-of-joining-in-spark-dcbd33d693c
val res = df1.join(df2, Seq("order_id", "firstname")).join(df3, Seq("order_id"))
res.explain(true)显示:

正如您所看到的,每个连接对都有明确的步骤。
https://stackoverflow.com/questions/69049012
复制相似问题