Spark SQL在拆分后无法识别空值
Posted
技术标签:
【中文标题】Spark SQL在拆分后无法识别空值【英文标题】:Spark SQL not recognizing null values after split 【发布时间】:2018-10-16 10:36:32 【问题描述】:我有与此处提出的问题类似的数据和问题: Spark sql how to explode without losing null values
我已经使用了为 Spark
df.withColumn("likes", explode(
when(col("likes").isNotNull, col("likes"))
// If null explode an array<string> with a single null
.otherwise(array(lit(null).cast("string")))))
问题是,在那之后我需要检查该列中是否有空值并在这种情况下采取措施。 Wehn 我尝试运行我的代码,作为文字插入的空值被识别为字符串而不是空值。
因此,即使该行在该列中有空值,下面的代码也将始终返回 0:
df.withColumn("likes", f.when(col('likes').isNotNull(), 0).otherwise(2)).show()
+--------+------+
|likes |origin|
+--------+------+
| CARS| 0|
| CARS| 0|
| null| 0|
| null| 0|
我使用 cloudera pyspark
【问题讨论】:
【参考方案1】:你可以破解这个,使用udf
:
val empty = udf(() => null: String)
df.withColumn("likes", explode(
when(col("likes").isNotNull, col("likes"))
// If null explode an array<string> with a single null
.otherwise(array(empty()))))
【讨论】:
嗨,谢谢。我只是复制粘贴你的函数,我得到一个错误:文件“我实际上找到了一种方法。否则得写这个:
.otherwise(array(lit(None).cast("string")))))
【讨论】:
以上是关于Spark SQL在拆分后无法识别空值的主要内容,如果未能解决你的问题,请参考以下文章
SQL Management Studio 在脚本创建后无法识别表存在