Pyspark 无法将空值转换为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(&

我正在使用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("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快得多。尤其是你看不到,你不能用相等来与无相比较。您应该使用“无”