python - 重新分区 pyspark 数据帧后无法执行连接
问题描述
我们正在加入两个巨大的文件。
所以我们试图在键列上重新分区,然后我们试图在键列上加入。
代码片段
def repartition_df(df,primary_key,partition_value):
df = df.repartition(partition_value,primary_key)
df_1 = repartition_df(df1,'pk1', 4 )
df_2 = repartition_df(df2,'pk1', 4 )
df3 = df_1.join(df_2,on = ['pk1'] , how = 'left')
错误信息
An error was encountered:
'NoneType' object has no attribute 'join'
Traceback (most recent call last):
AttributeError: 'NoneType' object has no attribute 'join'
当它起作用时:
现在,如果我不重新分配并继续加入,它工作正常。
但是从性能的角度来看,我们想在重新分区后加入
你能告诉我吗,我该如何进行。
解决方案
只需添加一个return
语句,您的解决方案就可以正常工作。
def repartition_df(df, primary_key, partition_value):
df = df.repartition(partition_value, primary_key)
return df
df_1 = repartition_df(df1, 'pk1', 4)
df_2 = repartition_df(df2, 'pk1', 4)
df3 = df_1.join(df_2, on=['pk1'], how='left')