apache-spark - 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()
)。我在网上找不到任何解释如何执行此操作的资源。
谢谢!
解决方案
如果你要加入一些我想要的整数列,你可以对你的数据框进行分区,我会以一些数字为模..即你想要多少个分区..这样共享一些公共哈希值的 id 将被组合在一起一个分区..然后你可以通过分解多个连接来执行你的连接..在一个循环中连续连接每个分区..我已经详细解释了这个案例..高效的pyspark连接
推荐阅读
- r - 在 r 中过滤分组数据
- openshift - 如何将 docker 文件迁移到 okd/openshift 模板?
- python - 将 pandas 列转换为特定位置的列表
- powershell - Powershell:哈希表的联合列表 - 采用最新的碰撞
- java - Java Mockito 参数匹配器的无效使用
- python - 如何从网站获取信息到图表上?
- oracle - Crystal 报表隐藏子报表查询
- c# - 从 DbContext 中删除实例会引发重复的 Id 错误
- node.js - 如何使用 socket io 向可以在房间中重叠的特定用户发送事件?
- driver - Windows 内核开发设备句柄无效的句柄值