答案 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()