我需要转换成JSON
的大量Parquet
文件。他们看起来像这样:
{
"foo": "bar",
"props": {
"prop1": "val1",
"prop2": "val2"
}
}
并且我需要将它们转换为一个结构为
Parquet
的文件(嵌套属性设为顶级,并以_
作为后缀):foo=bar
_prop1=val1
_prop2=val2
现在是捕获:并非所有的
JSON
文档都具有相同的属性。因此,如果doc1具有prop1
和prop2
,但doc2具有prop3
,则最终的Parquet
文件必须具有这三个属性(对于某些记录,其中某些属性将为null)。我知道
Parquet
需要预先提供schema
,所以我目前的计划是:JSON
文件schema
(使用Kite,like this)schemas
Parquet
这种方法使我感到非常复杂,缓慢且容易出错。我想知道是否有更好的方法使用
Spark
实现此目的。
最佳答案
事实证明,Spark已经为您做到了。当它读取JSON文档并且您未指定架构时,它将为您推断/合并它们。所以在我的情况下,这样的事情会起作用:
val flattenedJson: RDD[String] = sparkContext.hadoopFile("/file")
.map(/*parse/flatten json*/)
sqlContext
.read
.json(flattenedJson)
.write
.parquet("destination")
关于java - 使用EMR/Spark将JSON转换为Parquet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44408550/