使用emr/spark将json转换为parquet

ffx8fchx  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(386)

我有很多钱 JSON 我需要转换成的文件 Parquet . 它们看起来像这样:

{
  "foo": "bar",
  "props": {
    "prop1": "val1",
    "prop2": "val2"
  }
}

我需要把它们变成 Parquet 其结构是这样的文件(嵌套属性被设置为顶级并获取 _ 作为后缀):

foo=bar
_prop1=val1
_prop2=val2

现在有个问题:不是所有的 JSON 文档具有相同的属性。所以,如果doc1 prop1 以及 prop2 ,但doc2 prop3 ,决赛 Parquet 文件必须具有这三个属性(对于某些记录,其中一些属性将为空)。
我明白 Parquet 需要一个 schema 所以我现在的计划是:
遍历所有 JSON 文件夹
推断 schema 每个文档(像这样使用kite)
合并所有 schemas 开始写 Parquet 这种方法给我的印象是非常复杂、缓慢而且容易出错。我想知道是否有更好的方法来实现这一点 Spark .

xmq68pz9

xmq68pz91#

原来spark已经帮你做了。当它读取json文档而您没有指定模式时,它将为您推断/合并它们。所以在我的情况下,像这样的方法是可行的:

val flattenedJson: RDD[String] = sparkContext.hadoopFile("/file")
  .map(/*parse/flatten json*/)

sqlContext
  .read
  .json(flattenedJson)
  .write
  .parquet("destination")

相关问题