我有一个 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/