Spark镶木地板嵌套值变平

时间:2016-05-03 11:37:31

标签: apache-spark parquet

我有镶木地板文件。我使用Spark加载。其中一个值是嵌套键,值对。我该如何压扁?

df.printSchema
root
|-- location: string (nullable = true)
|-- properties: string (nullable = true)


texas,{"key":{"key1":"value1","key2":"value2"}}

感谢,

1 个答案:

答案 0 :(得分:1)

您可以在数据框上使用explode并向其传递一个使用scala4s读取JSON列的函数。 Scala4s具有简单的解析API,对于您的情况,它看起来像:

val list = for {
  JArray(keys) <- parse(json) \\ "key"
  json @ JObject(key) <- keys
  JField("key1", JString(key1)) <- key
  JField("key2", JString(key2)) <- key
} yield {
  Seq(key1, key2)
}

这会使您的数据框架变得扁平化。

如果您还想为密钥添加列,则可以在爆炸后使用withColumn(将密钥保留在新列中)。