Spark Dataframe:从Map类型生成元组数组

时间:2017-05-14 11:19:15

标签: apache-spark apache-spark-sql spark-dataframe

我的下游源代码不支持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建议生成如下。

谢谢!

1 个答案:

答案 0 :(得分:0)

只需使用udf

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

并根据您的需要调整输入类型。