0

试图想出一个快速的 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似乎是最平衡且相当快的。

问题:

  1. 在理解直接使用 PyArrow 序列化数据帧和 serializing 之间的区别时,我是否遗漏了什么?pyarrow.TableTable 在数据帧主要由字符串组成的情况下闪耀,这在我们的案例中很常见。

  2. pyarrow.Table长期存储数据帧的有效选择吗?它似乎“有效”,但大多数人只是坚持使用 Parquet 或其他东西。

  3. Parquet/Feather 在内存/存储大小方面与 pyarrow.Table 一样好,但在半文本数据帧上相当慢(慢 2-3 倍)。我可能做错了什么吗?

根据我们的基准,对于混合类型的数据帧,JSON 似乎仍然是一个选项。

如果需要,我可以提供数字。

4

0 回答 0