【问题标题】:Spark output JSON vs Parquet file size discrepancySpark 输出 JSON 与 Parquet 文件大小差异
【发布时间】:2019-01-20 11:05:22
【问题描述】:

这里有新的 Spark 用户。我无法通过 Spark 找到有关 JSON 和同一数据帧的 parquet 输出之间的文件大小比较的任何信息。

目前使用非常小的数据集进行测试,执行 df.toJSON().collect() 然后写入磁盘会创建一个 15kb 的文件。但是执行 df.write.parquet 会创建 105 个文件,每个文件大约 1.1kb。为什么在这种情况下,parquet 的总文件大小比 JSON 大得多?

提前致谢

【问题讨论】:

    标签: apache-spark parquet


    【解决方案1】:

    您对 df.toJSON.collect 所做的是从所有数据中获取单个 JSON(在您的情况下为 15kb)并将其保存到磁盘 - 对于您想要使用的情况,这不是可扩展的以任何方式激发火花。

    为了保存镶木地板,您正在使用 spark 内置函数,并且由于某种原因,您似乎有 105 个分区(可能是您所做的操作的结果),所以您得到了 105 个文件。这些文件中的每一个都有文件结构的开销,并且可能存储 0,1 或 2 条记录。如果你想保存一个文件,你应该在保存之前合并(1)(这只是为了你拥有的玩具示例)所以你会得到 1 个文件。请注意,由于文件格式开销,它仍然可能更大(即开销可能仍然大于压缩收益)

    【讨论】:

      【解决方案2】:

      柯南,在不知道数据性质的情况下很难准确回答您的问题(您甚至不知道 DataFrame 中的行数)。但让我推测一下。

      首先。包含 JSON 的文本文件通常比 parquet 占用更多磁盘空间。至少当一个存储数百万行时。原因是 parquet 是高度优化的基于列的存储格式,它使用二进制编码来存储您的数据

      第二。我猜你有一个非常小的数据框,有 105 个分区(可能有 105 行)。当您存储很小的磁盘占用空间时,应该不会打扰您,但如果确实如此,您需要注意每个 parquet 文件都有一个相对较大的标题来描述您存储的数据。

      【讨论】:

        猜你喜欢
        • 2019-11-10
        • 2018-09-24
        • 2021-04-19
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-02
        相关资源
        最近更新 更多