根据现有列值替换Null

时间:2018-01-31 01:53:14

标签: pyspark

我正在处理数据帧。某些记录中存在NULL的数据帧列之一。我需要在退出列上用一些计算来替换NULL。

例如。 current dataframe

要求: - required dataframe

2 个答案:

答案 0 :(得分:1)

我们假设您的数据框名称为 df

以下是您的用例代码。它检查B列的可为空性并应用计算来替换NULL。从您提供的值图像中我可以解释的是,计算的值将是500 +列C值(对于实际情况,您可以根据您的要求更改此计算)。

CONSTANT = 500
new_column_2 = when(col("B").isNull(), (CONSTANT + col("C"))).otherwise(col("B"))
df.withColumn("B", new_column_2)

希望,这有帮助。

答案 1 :(得分:0)

如果您可以预先计算新值,则可以使用pyspark,如下所示。似乎Spark不支持动态计算其他列的值。

data = [
[1,0.5,1],
[2,0.5,1],
[2,0.78,2],
[3,0.321,3],
[2,None,4],
[3,None,1],
[3,None,2]
]
df = spark.createDataFrame(data, ['A', 'B', 'C'])
df.fillna(500, subset=['B']).show()

如果你可以使用pandas,你应该能够这样做。

pdf = df.toPandas()
pdf = pdf.fillna(value={'B': pdf.C + 500})

当然,您始终可以将数据帧转换回Spark:

df2 = spark.createDataFrame(pdf)
df2.show()

<强>更新 在阅读了Gourav的回答后,我意识到Spark可以实现。不要忘记导入必要的方法。

from pyspark.sql.functions import col, when
df.withColumn('B', when(col('B').isNull(), 500+col('C')).otherwise(col('B'))).show()