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

Kur*_*ile 2 scala apache-spark apache-spark-sql

我有一个UDF使用scala内置toArray函数将Map(在这种情况下为String-> String)转换为Array

val toArray = udf((vs: Map[String, String]) => vs.toArray)
Run Code Online (Sandbox Code Playgroud)

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

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

[{"_1":"aKey","_2":"aValue"}] 
Run Code Online (Sandbox Code Playgroud)

[{"key":"aKey","value":"aValue"}]
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以使用一个类:

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

val toArray = udf((vs: Map[String, String]) => vs.map { 
  case (k, v) => KV(k, v)
}.toArray )
Run Code Online (Sandbox Code Playgroud)