是否可以分块读取镶木地板文件?

xia*_*dai 8 parquet

例如,pandasread_csv有一个chunk_size参数,它允许read_csv在 CSV 文件上返回一个迭代器,以便我们可以分块读取它。

Parquet 格式以块的形式存储数据,但没有记录的方法可以像read_csv.

有没有办法以块的形式读取镶木地板文件?

小智 29

您可以使用pyarrow 中的iter_batchesto_pandas方法应该为您提供 pandas DataFrame。

例子:

import pyarrow.parquet as pq

parquet_file = pq.ParquetFile('example.parquet')

for batch in parquet_file.iter_batches():
    print("RecordBatch")
    batch_df = batch.to_pandas()
    print("batch_df:", batch_df)
Run Code Online (Sandbox Code Playgroud)


lee*_*lee 10

如果您的镶木地板文件不是使用行组创建的,则 read_row_group 方法似乎不起作用(只有一组!)。

但是,如果您的 parquet 文件被分区为 parquet 文件的目录,您可以使用 fastparquet 引擎(该引擎仅适用于单个文件)来读取文件,然后连接 pandas 中的文件或获取值并连接 ndarray

import pandas as pd
from glob import glob
files = sorted(glob('dat.parquet/part*'))

data = pd.read_parquet(files[0],engine='fastparquet')
for f in files[1:]:
    data = pd.concat([data,pd.read_parquet(f,engine='fastparquet')])
Run Code Online (Sandbox Code Playgroud)


Mic*_*eld 6

我不确定是否可以直接从 pandas 执行此操作,但 pyarrow 公开了read_row_group。生成的表应该可以使用to_pandas转换为 pandas 数据框

从 pyarrow 3.0 开始,现在有一个可以使用的iter_batches方法。