将嵌套的空值转换为数据框火花内的空字符串
Posted
技术标签:
【中文标题】将嵌套的空值转换为数据框火花内的空字符串【英文标题】:Converting nested null values to empty strings inside dataframe spark 【发布时间】:2019-09-18 20:15:31 【问题描述】:我希望将嵌套在字符串数组中的空值转换为 spark 中的空字符串。数据在数据框中。我计划在使数据帧 null 安全后运行 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)
【问题讨论】:
【参考方案1】:UDF
的输入是字符串序列,而不是单个字符串。既然是这种情况,您需要map
覆盖它。你可以这样做:
val udfSafeString = udf((arr: Seq[String]) =>
arr.map(s => if (s == null) "" else s)
)
df.withColumn("carLineName", udfSafeString($"carLineName"))
【讨论】:
以上是关于将嵌套的空值转换为数据框火花内的空字符串的主要内容,如果未能解决你的问题,请参考以下文章
从sql table处理PSCustomObject中的空值。无法转换对象