Spark 输出 JSON 与拼花地板文件大小的差异



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

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

提前致谢

你对df.toJSON.collect所做的是你从所有数据中获取一个JSON(在你的例子中是15kb(,并将其保存到磁盘 - 这不是你想要以任何方式使用Spark的情况可扩展的东西。

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

柯南,如果不了解数据的性质,就很难准确地回答你的问题(你甚至不知道数据帧中的行数(。但让我推测一下。

第一。包含 JSON 的文本文件通常会占用更多的磁盘空间,然后是镶木地板。至少当一个人存储数百万到数十亿行时。原因是 parquet 是高度优化的基于列的存储格式,它使用二进制编码来存储您的数据

第二。我猜你有一个非常小的数据帧,有 105 个分区(可能是 105 行(。当您存储这么小的东西时,磁盘占用不应打扰您,但如果它确实如此,您需要注意每个 parquet 文件都有一个相对较大的标头来描述您存储的数据。

相关内容

最新更新