如何使用自定义键值名称将映射列转换为结构类型?

Posted

技术标签:

【中文标题】如何使用自定义键值名称将映射列转换为结构类型?【英文标题】:How to convert map column to struct type with custom key-value names? 【发布时间】:2017-06-01 16:12:52 【问题描述】:

我有一个 UDF,它使用 scala 内置的 toArray 函数将 Map(在本例中为 String -> String)转换为数组

val toArray = udf((vs: Map[String, String]) => vs.toArray)

数组结构的元组键名称为_1,值名称为_2

如何更改 UDF 定义,使键名称为“键”,值名称为“值”作为 UDF 定义的一部分?

["_1":"aKey","_2":"aValue"] 

["key":"aKey","value":"aValue"]

【问题讨论】:

【参考方案1】:

你可以使用一个类:

case class KV(key:String, value: String)

val toArray = udf((vs: Map[String, String]) => vs.map  
  case (k, v) => KV(k, v)
.toArray )

【讨论】:

嗨@user8098908,地图本身可以为空-这会引发空指针异常吗?也许应该对此进行检查?

以上是关于如何使用自定义键值名称将映射列转换为结构类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Hadoop 中使用自定义类型

如何将 LRESULT 转换为自定义结构类型?

如何手动将 apollo 自定义标量映射到客户端类型

如何将数据从 Firestore 映射到列表并转换为对象数据类型

如何将键值映射转换为 int 切片 [关闭]

如何将时间字符串转换为自定义日期格式?