试图想出一个快速的 Pandas 数据帧序列化和长期存储的解决方案。数据框内容是表格的,但由用户提供,可以是任意的,因此可以是完全文本列和完全数字/布尔列。
主要目标是:
尽快序列化数据帧,以便将其转储到磁盘上。
使用格式,我稍后可以从磁盘加载回数据帧。
好吧,序列化和紧凑输出文件的内存占用最少。
运行基准比较不同的序列化方法,包括:
- 实木复合地板:
df.to_parquet()
- 羽毛:
df.to_feather()
- JSON:
df.to_json()
- CSV:
df.to_csv()
- PyArrow:
pyarrow.default_serialization_context().serialize(df)
- PyArrow.Table:
pyarrow.default_serialization_context().serialize(pyarrow.Table.from_pandas(df))
在此期间序列化速度和内存占用可能是最大的因素(阅读:摆脱数据,尽快将其转储到磁盘)。
奇怪的是,在我们的基准测试中,序列化pyarrow.Table
似乎是最平衡且相当快的。
问题:
在理解直接使用 PyArrow 序列化数据帧和 serializing 之间的区别时,我是否遗漏了什么?
pyarrow.Table
Table 在数据帧主要由字符串组成的情况下闪耀,这在我们的案例中很常见。是
pyarrow.Table
长期存储数据帧的有效选择吗?它似乎“有效”,但大多数人只是坚持使用 Parquet 或其他东西。Parquet/Feather 在内存/存储大小方面与 pyarrow.Table 一样好,但在半文本数据帧上相当慢(慢 2-3 倍)。我可能做错了什么吗?
根据我们的基准,对于混合类型的数据帧,JSON 似乎仍然是一个选项。
如果需要,我可以提供数字。