我需要将大量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
实现此目的。
答案 0 :(得分:0)
原来Spark已经为你做了这件事。当它读取JSON文档并且您没有指定架构时,它将为您推断/合并它们。所以在我的情况下,这样的事情会起作用:
val flattenedJson: RDD[String] = sparkContext.hadoopFile("/file")
.map(/*parse/flatten json*/)
sqlContext
.read
.json(flattenedJson)
.write
.parquet("destination")