python - 如何在一台计算机上使用 Python 组合小型 Parquet 文件?

标签 python pandas dask parquet amazon-athena

我有一个 24GB CSV 文件(约 26 列),我想将其转换为 Parquet 格式。通过在线研究,我了解到,为了获得最佳性能,在使用 Amazon Athena 进行查询时,建议的 Parquet 文件大小在 128MB 到 1GB 之间。

以下代码可有效地将 CSV 并行转换为数百个 6-13MB Parquet 文件:

import dask.dataframe as dd

dd.read_csv('input_24GB.csv', dtype=object).to_parquet('output_folder')

为了控制输出大小,我在dd.read_csv()中使用了blocksize参数:

dd.read_csv('input_24GB.csv', dtype=object, blocksize=1e9).to_parquet('output_folder')

不幸的是,没有办法准确预测特定 block 大小的输出 Parquet 文件大小。然后我尝试看看是否可以将所有数百个 6-13MB Parquet 文件合并为更大的 Parquet 文件,以便它们至少为 128MB。我想出的唯一解决方案是连续工作的。

是否有更好、更快的方法来在笔记本电脑上使用有限的计算/内存资源来完成整个任务?

最佳答案

blocksize 仅控制输入数据的大小,无法直接控制您正在编写的 Parquet 文件的大小。但是,您可以查看分区数量和当前文件大小,以准确估计应该使用的分区数量来获得所需的文件大小。例如,如果您当前获得 200 个分区,则可以在写入 parquet 文件之前先将数据帧重新分区到 10 个:

dd.read_csv('input_24GB.csv', dtype=object, blocksize=1e9)
.repartition(npartitions=10)
.to_parquet('output_folder')

关于python - 如何在一台计算机上使用 Python 组合小型 Parquet 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60102738/

相关文章:

Python 计算 dict 值中的项目,它是一个列表

python - 使用 ipython 或 python 的 matplotlib.pyplot 无法显示图像

python - Pandas 日期时间格式不一致

python - 如何将年龄分箱特征替换为数值数据?

python - dask,在每个worker上执行不可序列化的对象

dask - 使用 Dask 从多个 Python 进程写入 Parquet 文件

Python 循环具有极长的运行时间

python - 使用属性来回避两个模型

python - 如何在 Pandas 数据框中用 0 填充多个列表?

python - 如何在一台机器上设置两个dask分布式调度器?