【发布时间】:2021-09-30 22:42:10
【问题描述】:
我有一个如下创建的数据框:
expanded_1 = pd.DataFrame({"Point": [random.choice(points) for x in range(30000000)],
"Price": [random.choice(prices) for x in range(30000000)]
})
我存储为 parquet 文件,磁盘上的大小为 90.2 MB。
在研究如何使用 parquet 进行压缩后,我按 Point 对值进行排序,以便可以将相似的数据保持在一起,同时理解这将使默认 parquet 压缩技术更有效。然而我看到的结果却完全相反。在运行以下:
expanded_1.sort_values(by=['Point']).to_parquet('/expanded_1_sorted.parquet')
生成的文件大小为 211 MB。
是什么导致尺寸增加?
【问题讨论】:
-
打印两者的输出是什么?
-
您能否分享一下
points和prices是什么?您通常可以通过检查 pyarrow.parquet.read_metadata 的返回来找到有关如何对 parquet 文件进行编码的更多信息。如果您检查这两个文件的元数据,会发现什么有趣的东西吗? -
@Pace 我得到了与
points = prices = range(1000)相似的结果。我认为这是乱码,reset_index(drop=True)似乎可以修复它。 (但我真的不知道自己在做什么。) -
@don'ttalkjustcode 乱码索引非常有意义。 Arrow 将检测一个简单的线性索引并将其存储为元数据而不是实际列。如果索引被打乱,它将被强制保存一个实际的列,它将使用 int64。请将其添加为答案。