我有两个大的pysparkDataframedf1和df2,其中包含gbs的数据。第一个Dataframe中的列是id1,col1。第二个Dataframe中的列是id2,col2。Dataframe的行数相等。另外,id1和id2的所有值都是唯一的。而且,id1的所有值正好对应于一个值id2。
为了。前几个条目与df1和df2区域相同,如下所示
df1型:
id1 | col1
12 | john
23 | chris
35 | david
df2型:
id2 | col2
23 | lewis
35 | boon
12 | cena
所以我需要连接键id1和id2上的两个Dataframe。df=df1.join(df2,df1.id1==df2.id2)恐怕这可能会受到洗牌的影响。如何针对这种特殊情况优化联接操作?
1条答案
按热度按时间lvmkulzt1#
为了避免在执行join操作时进行洗牌,请根据id列重新洗牌数据。
重新洗牌操作也会进行完全洗牌,但如果有多个加入,它会优化您的进一步加入。
另一种避免加入时出现混乱的方法是利用bucketing。
通过在id上使用bucketby子句来保存这两个Dataframe,然后在稍后读取Dataframe时,id列将驻留在相同的执行器中,从而避免了洗牌。
但要利用bucketing的好处,您需要一个hive元存储,因为bucketing信息包含在其中。
这还包括创建bucket然后读取的附加步骤。