tih*_*iho 6 left-join database-partitioning dataframe apache-spark apache-spark-sql
我有两个大数据框df1并按df2列分区a,我想有效地计算两a列和另一列的左连接b:
df1.join(df2, on=['a', 'b'], how='left_outer')
当如上编写时,Spark 通过 key 重新排列两个数据帧(a, b),这是非常低效的。相反,我希望它利用现有的分区a来避免混洗(在每个分区内执行连接),这应该快得多(特别是因为我有进一步的处理步骤可以从这种分区中受益)。
有什么方法可以防止这种洗牌并获得由 分区的结果数据帧a?
请注意,如果它是内部连接,我可以执行以下操作,但是 (1) 我不确定它是否有效,并且无论如何 (2) 它不适用于左连接(我只提供以防万一它会帮助别人):
df1.join(df2, on=['a'], how='inner').filter(df1.b == df2.b)
PS:两个数据帧都太大无法广播
| 归档时间: |
|
| 查看次数: |
752 次 |
| 最近记录: |