Pyspark 基于现有列值替换Null

Pyspark 基于现有列值替换Null,pyspark,Pyspark,我正在处理一个数据帧。数据帧的一列,在某些记录中为空。我需要用对现有列的一些计算来替换NULL 例如。 所需:- 如果可以预先计算新值,可以使用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']) d

我正在处理一个数据帧。数据帧的一列,在某些记录中为空。我需要用对现有列的一些计算来替换NULL

例如。

所需:-

如果可以预先计算新值,可以使用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()
然而,如果你能使用熊猫,你应该能够这样做

pdf = df.toPandas()
pdf = pdf.fillna(value={'B': pdf.C + 500})
当然,您始终可以将数据帧转换回Spark:

df2 = spark.createDataFrame(pdf)
df2.show()
更新: 在阅读了古拉夫的答案后,我意识到用Spark是可能的。别忘了导入必要的方法

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

假设您的数据帧名称为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)