【问题标题】:How to loop large parquet file with generators in python?如何在 python 中使用生成器循环大型镶木地板文件?
【发布时间】:2018-06-08 07:32:24
【问题描述】:

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

文件内容为pandas DataFrame。

【问题讨论】:

    标签: python pandas dataframe generator parquet


    【解决方案1】:

    您不能逐行迭代,因为它不是存储方式。您可以按如下方式遍历行组:

    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的值?
    【解决方案2】:

    您可以使用 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,你绝对应该为你的环境优化你的tensorflow安装以获得最佳性能。
    【解决方案3】:

    如果通常情况下,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
    

    一次只能在内存中保存一个文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 2018-01-07
      • 2020-01-17
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 2021-12-06
      相关资源
      最近更新 更多