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

时间:2019-11-29 04:26:51

标签: parquet

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

Parquet格式将数据存储在块中,但是没有记录的方式读取read_csv之类的块。

有没有办法读取大块的实木复合地板文件?

3 个答案:

答案 0 :(得分:1)

我不确定是否可以直接从熊猫那里做,但是pyarrow暴露了read_row_group。生成的表格应该可以通过to_pandas

转换为熊猫数据框。

答案 1 :(得分:1)

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

但是,如果将镶木地板文件作为镶木地板文件目录进行分区,则可以使用仅对单个文件起作用的fastparquet引擎来读取文件,然后将它们串联在panda中,或者获取值并串联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')])

答案 2 :(得分:1)

这是一个老问题,但如果您想在不使用 concat 的情况下读取一个班轮中的所有块,以下对我有用:

pd.read_parquet("chunks_*", engine="fastparquet")

或者如果你想阅读特定的块,你可以尝试:

pd.read_parquet("chunks_[1-2]*", engine="fastparquet")

(这样你只会读取前两个块,也不需要指定引擎)

相关问题