1

在 Python 中创建 Parquet 文件的最常见方法似乎是首先创建一个 Pandas 数据框,然后使用 pyarrow 将表写入 Parquet。我担心这可能会过度占用内存 - 因为它需要至少一个完整的数据集副本存储在内存中才能创建 pandas 数据框。

我想知道由于列压缩要求是否需要将整个数据集加载到内存中,或者是否有更有效和基于流的方法。就我而言,我将以流媒体方式接收记录。对于类似的 csv 输出过程,我们以 1000 的批次将行写入磁盘,因此需要保存在内存中的行数永远不会达到完整数据集的大小。

我是不是该...?:

  1. 只需创建一个熊猫数据框,然后将其写入镶木地板。(这意味着整个数据集需要存储在内存中,但我们将其视为必要要求。)
  2. 当我们收到它们时,使用一些流友好的方式一次写入 1000 行左右,从而最大限度地减少整个过程中的时间点 RAM 消耗总量。(我没有看到任何有关如何执行此操作的文档,我不确定它甚至是镶木地板的选择。)
  3. 将所有内容写入 CSV,然后使用智能读取/分析 CSV 内容并在事后创建压缩镶木地板的功能。(运行时间可能会变慢,但内存配置文件会降低,并且在非常大的文件上失败的机会也会降低。)

想法?建议?

4

1 回答 1

1

您需要 Parquet 中的行组。有关它们是什么的解释,请参见此处,但简短的版本是柱状数据仅限于多行的块,并且每个块都可以单独附加到文件中。您可以使用PyArrow为传入数据流实现此功能。

于 2020-11-13T12:43:39.817 回答