在数据帧中将嵌套的 null 值转换为空字符串会产生火花



我希望将嵌套在字符串数组中的空值转换为 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"))

相关内容

  • 没有找到相关文章