如何在Python中使用生成器循环遍历大型Parquet文件?

7

是否可以使用生成器打开parquet文件并逐行迭代?这样可以避免将整个parquet文件加载到内存中。

文件的内容是pandas DataFrame。

3个回答

8

由于数据存储方式不同,您无法按行迭代。您可以按以下方式遍历行组:

from fastparquet import ParquetFile
pf = ParquetFile('myfile.parq')
for df in pf.iter_row_groups():
    process sub-data-frame df

默认情况下,每个子数据框的行数为5000万行,是否有办法更改n_row_per_group的值? - MacSanhe

1

您可以使用tensorflow_io进行迭代。

import tensorflow_io as tfio

dataset = tfio.IODataset.from_parquet('myfile.parquet')

for line in dataset.take(3):
    # print the first 3 lines
    print(line)

请注意CPU指令的编译和兼容性,否则会出现错误提示:“您的CPU支持此TensorFlow IO二进制文件未编译使用的指令:AVX2 FMA”。 - madmatrix
很好的观点@madmatrix,你应该为你的环境优化tensorflow安装以获得最佳性能。 - DanDy

0

如果通常情况下,Parquet 存储为一个目录中的多个文件,则可以运行:

for parquet_file in glob.glob(parquet_dir + "/*.parquet"):
    df = pd.read.parquet(parquet_file)
    for value1, value2, value3 in zip(df['col1'],df['col2'],df['col3']):
        # Process row
    del df

每次只有一个文件会在内存中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接