将嵌套的空值转换为数据框火花内的空字符串

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"))

【讨论】:

以上是关于将嵌套的空值转换为数据框火花内的空字符串的主要内容,如果未能解决你的问题,请参考以下文章

将空字符串写入 MongoDB 输出 - Pentaho

如何用函数链中的空字符串替换数据库中的空值

从sql table处理PSCustomObject中的空值。无法转换对象

ssis 空日期作为空值

如何从列类型列表中删除 pandas DataFrame 中的空值

oracle 查询 空值 注意不是 null