我正在执行联接的列很多,有时可能包含数十亿行的空值,因此我想对这些列加盐以防止联接后出现偏斜,如Jason Evan的帖子中所述:{{3} }
我在Python中找不到与此等效的示例,并且语法非常不同,以至于我不知道如何翻译它。
我大概有这个:
import pyspark.sql.functions as psf
big_neg = -200
for column in key_fields: #key_fields is a list of join keys in the dataframe
df = df.withColumn(column,
psf.when(psf.col(column).isNull(),
psf.round(psf.rand().multiply(big_neg))
).otherwise(df[column]))
当前由于语法错误而失败(TypeError:“列”对象不可调用 ),但我已经尝试了许多语法组合来摆脱typeError并陷入困境。我真的很感激此问题。
答案 0 :(得分:0)
我实际上可以在休息后弄清楚。
我认为这对遇到此问题的其他人会有所帮助,所以我将发布解决方案:
df = df.withColumn(column, psf.when(df[column].isNull(), psf.round(psf.rand()*(big_neg))).otherwise(df[column]))