【问题标题】:Speeding up PyArrow Parquet to Pandas for dataframe with lots of strings为具有大量字符串的数据帧加速 PyArrow Parquet 到 Pandas
【发布时间】:2020-09-16 06:17:19
【问题描述】:

我有一个我想经常查询的 pandas DataFrame(通过 API 以 ray 形式)。我正在尝试加快它的加载速度,但是将其转换为熊猫需要大量时间(3+s)。对于我的大多数数据集,它很快,但这个不是。我的猜测是因为其中 90% 是字符串。

[742461 rows x 248 columns]

磁盘上大约有 137MB。为了消除磁盘速度的影响,我将 .parq 文件放在了 tmpfs 挂载中。

现在我已经试过了:

  • 使用 pyArrow Parquet (read_table) 读取 parquet,然后将其转换为 pandas(立即读入 table,但使用 to_pandas 需要 3 秒)
  • 玩弄我在 pyarrow/parquet 中能想到的几乎所有 to_pandas 设置
  • 使用 pd.from_parquet 读取它
  • 从 Plasma 内存存储 (https://arrow.apache.org/docs/python/plasma.html) 中读取它并转换为 pandas。同样,阅读是即时的,但 to_pandas 需要时间。
  • 将所有字符串转换为类别

关于如何在处理字符串时加快 pandas 转换,有人有什么好的建议吗?我有很多内核和内存。

我的最终结果想要成为 pandas DataFrame,因此我不受 parquet 文件格式的约束,尽管它通常是我的最爱。

问候, 尼克拉斯

【问题讨论】:

    标签: python pandas parquet ray


    【解决方案1】:

    最后,我通过更仔细地处理数据来减少时间,主要是通过删除空白值,确保我们有尽可能多的 NA 值(而不是空白字符串等),并对所有文本数据进行分类,小于50% 独特的内容。

    我最终通过 PyArrow 生成了模式,这样我就可以创建具有自定义索引大小(int64 而不是 int16)的分类值,这样我的类别就可以保存更多值。最终数据量减少了 50%。

    【讨论】:

      猜你喜欢
      • 2016-11-29
      • 2020-12-21
      • 2022-11-19
      • 1970-01-01
      • 2014-06-07
      • 2019-05-07
      • 2017-09-29
      • 2020-06-10
      相关资源
      最近更新 更多