我希望将嵌套在字符串数组中的空值转换为 Spark 中的空字符串。数据位于数据帧中。我计划在使数据帧为空安全后运行reduce函数,不确定这是否有助于回答问题。我正在使用火花 1.6。
图式:
root
|-- carLineName: array (nullable = true)
| |-- element: string (containsNull = true)
示例输入:
+--------------------+
|carLineName |
+--------------------+
|[null,null,null] |
|[null, null] |
|[Mustang, null] |
|[Pilot, Jeep] |
期望输出:
+--------------------+
|carLineName |
+--------------------+
|[,,] |
|[,] |
|[Mustang,] |
|[Pilot, Jeep] |
我的尝试:
val safeString: Seq[String] => Seq[String] = s => if (s == null) "" else s
val udfSafeString = udf(safeString)
UDF
的输入是一系列字符串,而不是单个字符串。既然是这种情况,你需要map
它。您可以按如下方式执行此操作:
val udfSafeString = udf((arr: Seq[String]) => {
arr.map(s => if (s == null) "" else s)
})
df.withColumn("carLineName", udfSafeString($"carLineName"))