Pyspark 无法将空值转换为0
我正在使用databricks,我不明白为什么我不能在一个看起来像常规整数列的列中将null值转换为0 我尝试了以下两种选择:Pyspark 无法将空值转换为0,pyspark,databricks,azure-databricks,Pyspark,Databricks,Azure Databricks,我正在使用databricks,我不明白为什么我不能在一个看起来像常规整数列的列中将null值转换为0 我尝试了以下两种选择: @udf(IntegerType()) def null_to_zero(x): """ Helper function to transform Null values to zeros """ return 0 if x == 'null' else x 后来: .withColumn(&
@udf(IntegerType())
def null_to_zero(x):
"""
Helper function to transform Null values to zeros
"""
return 0 if x == 'null' else x
后来:
.withColumn("col_test", null_to_zero(col("col")))
所有内容都返回为null
第二个选项根本没有任何影响.na.fill(value=0,subset=[“col”])
我错过了什么?这是使用Datatricks时空值的特定行为吗?空值表示为
None
,而不是字符串null
。对于您的情况,最好使用函数,如下所示(基于文档的示例):
从pyspark.sql.functions导入合并,点亮
cDf=spark.createDataFrame([(无,无),(1,无),(无,2)],(“a”,“b”))
cDf.withColumn(“col_test”,聚结(cDf[“a”],lit(0.0))).show()
将为您提供所需的行为:
+----+----+--------+
| a| b|col_test|
+----+----+--------+
|null|null| 0.0|
| 1|null| 1.0|
|null| 2| 0.0|
+----+----+--------+
如果需要更复杂的逻辑,则可以使用when/other,条件为null:
cDf.withColumn(“col_test”,当(cDf[“a”].isNull(),lit(0.0))。否则(cDf[“a”])。show()
空值表示为None
,而不是字符串null
。对于您的情况,最好使用函数,如下所示(基于文档的示例):
从pyspark.sql.functions导入合并,点亮
cDf=spark.createDataFrame([(无,无),(1,无),(无,2)],(“a”,“b”))
cDf.withColumn(“col_test”,聚结(cDf[“a”],lit(0.0))).show()
将为您提供所需的行为:
+----+----+--------+
| a| b|col_test|
+----+----+--------+
|null|null| 0.0|
| 1|null| 1.0|
|null| 2| 0.0|
+----+----+--------+
如果需要更复杂的逻辑,则可以使用when/other,条件为null:
cDf.withColumn(“col_test”,当(cDf[“a”].isNull(),lit(0.0))。否则(cDf[“a”])。show()
当我试图计算None时,如果我想构建一个helper函数,它似乎也不起作用如果x==None-else x,则返回0
有这样的方法吗?为什么合并是更好的选择?合并将是更好的选择,因为Spark内置函数比UDF快得多。尤其是你看不到,你不能用相等来与无相比较。您应该使用“is None”,当我试图计算None时,如果我想构建一个helper函数,它似乎也不起作用如果x==None-Others x,则返回0
是否有这样的方法?为什么合并是更好的选择?合并将是更好的选择,因为Spark内置函数比UDF快得多。尤其是你看不到,你不能用相等来与无相比较。您应该使用“无”