我有镶木地板文件。我使用Spark加载。其中一个值是嵌套键,值对。我该如何压扁?
df.printSchema
root
|-- location: string (nullable = true)
|-- properties: string (nullable = true)
texas,{"key":{"key1":"value1","key2":"value2"}}
感谢,
答案 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(将密钥保留在新列中)。