首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用类似(但略有不同)的joins避免火花洗牌

使用类似(但略有不同)的joins避免火花洗牌
EN

Stack Overflow用户
提问于 2021-09-03 18:02:22
回答 1查看 40关注 0票数 0

假设我有一系列连接在一起的数据帧,它们的列集略有不同

代码语言:javascript
运行
复制
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_idmonth的不同组合上打乱其他结果。

有没有办法让Spark把所有的分区都单独放在customer_id上?

EN

回答 1

Stack Overflow用户

发布于 2021-09-03 18:53:47

与以下内容相关:

有没有办法让

把所有的分区都单独放在customer_id上?

不,没有,那不是Spark的工作方式。基本上,join的左侧和右侧需要使用相同的分区工具进行(重新)分区,并在多组join中完成。

运行一个.explain将会揭示这一点。它不是ORACLE数据库。

这里有一个关于连接和混洗效果的很好的读物:https://towardsdatascience.com/the-art-of-joining-in-spark-dcbd33d693c

代码语言:javascript
运行
复制
val res = df1.join(df2, Seq("order_id", "firstname")).join(df3, Seq("order_id"))
res.explain(true)

显示:

正如您所看到的,每个连接对都有明确的步骤。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69049012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档