我的下游源代码不支持Map类型,而我的源代码也不支持,因此发送此代码。我需要将此映射转换为struct(元组)数组。
Scala支持Map.toArray,它为你创建一个元组数组,看起来像我在Map上需要的函数进行转换:
{
"a" : {
"b": {
"key1" : "value1",
"key2" : "value2"
},
"b_" : {
"array": [
{
"key": "key1",
"value" : "value1"
},
{
"key": "key2",
"value" : "value2"
}
]
}
}
}
Spark中最有效的方法是假设要更改的字段是嵌套字段。 e.g
a是根级数据框列
a.b是第1级的地图(来自来源)
a.b_是struct的数组类型(这是我想在将a.b转换为数组时生成的)
到目前为止,答案是我认为的一些方法,只需将withColumn和UDF建议生成如下。
谢谢!
答案 0 :(得分:0)
只需使用udf
:
val toArray = udf((vs: Map[String, String]) => vs.toArray)
并根据您的需要调整输入类型。