【问题标题】:How to convert JSON documents to Parquet/ORC file如何将 JSON 文档转换为 Parquet/ORC 文件
【发布时间】:2020-05-10 00:35:11
【问题描述】:

是否可以将 JSON 转换为 Parquet/ORC 格式?

我已在 HIVE 中按照以下步骤将 CSV/TSV 数据转换为 Parquet

1: Create an external HIVE Table with TSV data source and TSV serde.
2: Create a normal HIVE table with Parquet serde.
3: INSERT INTO ParquetTable SELECT * FROM ParquetTable.

所以问题是,有没有类似的方法可以将 JSON 转换为 Parquet,还是我需要先展平 JSON 数据?

【问题讨论】:

    标签: database parquet orc


    【解决方案1】:

    这个 python 库对我有用:https://github.com/noirello/pyorc。给出一个代码sn-p如下(借自库的README.md)

    import pyorc
    
    with open("./new_data.orc", "wb") as data:
        with pyorc.Writer(data, "struct<col0:int,col1:string>") as writer:
            writer.write((1, "ORC from Python"))
    

    【讨论】:

    • 感谢您对@BNazaruk 发表评论。我不明白为什么这不是问题的答案,你能指出来吗?如果您能告诉我如何改进上述答案,那就太好了。
    • 你是对的。它确实有效。它在上下文之外不起作用,这就是我们提供验证的方式。很抱歉。
    【解决方案2】:

    这可以使用 Apache Spark 库轻松完成。

    先决条件:数据应该是单行 JSON。由于 Spark DataSource 库不支持多行 JSON。

    以下是使用 Spark 2.x 的示例代码:

     val spark = SparkSession.builder()
      .master("local")
      .getOrCreate()
    
    val inpDF = spark.read.json("<inputPath>")
    // Auto schema Inference 
    inpDF.printSchema()
    inpDF.write.parquet("<outputPath>")
    

    单行 JSON:{"Device":{"Brand":"Apple","Model":"Iphone11Pro"}}

    多行 JSON:{ "Device": { "Brand":"Apple", "Model":"Iphone11Pro" } }

    【讨论】:

    • 你说数据应该是单行 JSON 是什么意思?你的意思是平坦的,没有嵌套和列表吗?
    • JSON 可以嵌套到任何级别。我在答案中添加了一个示例。
    猜你喜欢
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2017-05-20
    • 2020-03-02
    • 2019-06-26
    • 2016-07-15
    • 2017-09-26
    相关资源
    最近更新 更多