Pyspark盐析:将列中的null替换为随机负值

时间:2019-03-14 19:29:07

标签: python apache-spark-sql pyspark-sql

我正在执行联接的列很多,有时可能包含数十亿行的空值,因此我想对这些列加盐以防止联接后出现偏斜,如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并陷入困境。我真的很感激此问题。

1 个答案:

答案 0 :(得分:0)

我实际上可以在休息后弄清楚。

我认为这对遇到此问题的其他人会有所帮助,所以我将发布解决方案:

df = df.withColumn(column, psf.when(df[column].isNull(), psf.round(psf.rand()*(big_neg))).otherwise(df[column]))