如何将Parquet文件读入Pandas DataFrame?

时间:2015-11-19 20:31:00

标签: python pandas parquet blaze

如何在不设置Hadoop或Spark等集群计算基础架构的情况下,将适当大小的Parquet数据集读入内存中的Pandas DataFrame?这只是我想在笔记本电脑上用简单的Python脚本在内存中读取的适量数据。数据不驻留在HDFS上。它可以在本地文件系统上,也可以在S3中。我不想启动和配置其他服务,如Hadoop,Hive或Spark。

我认为Blaze / Odo会让这成为可能:Odo文档提到了Parquet,但是这些示例似乎都是通过外部Hive运行时进行的。

6 个答案:

答案 0 :(得分:47)

pandas 0.21介绍new functions for Parquet

pd.read_parquet('example_pa.parquet', engine='pyarrow')

pd.read_parquet('example_fp.parquet', engine='fastparquet')

以上链接说明:

  

这些引擎非常相似,应该读/写几乎相同的镶木地板格式文件。这些库的不同之处在于具有不同的底层依赖关系(fastparquet使用numba,而pyarrow使用c-library)。

答案 1 :(得分:16)

更新:自从我回答这个问题以来,为了更好地阅读和编写实木复合地板,我们已经做了很多关于Apache Arrow的工作。另外:http://wesmckinney.com/blog/python-parquet-multithreading/

有一个python镶木地板阅读器相对运行良好:https://github.com/jcrobak/parquet-python

它将创建python对象,然后您必须将它们移动到Pandas DataFrame,因此该过程将比pd.read_csv慢。

答案 2 :(得分:0)

除了熊猫,Apache pyarrow还提供了将拼花地板转换为数据框的方法

代码很简单,只需键入:

import pyarrow.parquet as pq

df = pq.read_table(source=your_file_path).to_pandas()

有关更多信息,请参阅Apache pyarrow Reading and Writing Single Files

中的文档。

答案 3 :(得分:0)

Parquet 文件总是很大。所以使用 dask 阅读它。

import dask.dataframe as dd
from dask import delayed
from fastparquet import ParquetFile
import glob

files = glob.glob('data/*.parquet')

@delayed
def load_chunk(path):
    return ParquetFile(path).to_pandas()

df = dd.from_delayed([load_chunk(f) for f in files])

df.compute()

答案 4 :(得分:0)

写入 parquet 时,请考虑使用 brotli 压缩。通过使用 brotli 压缩,我将 8GB 文件镶木地板文件的大小减少了 70%。与 gzip、snappy、pickle 相比,Brotli 使文件更小,读/写速度更快。虽然pickle可以做元组而parquet不能。

df.to_parquet('df.parquet.brotli',compression='brotli')
df = pd.read_parquet('df.parquet.brotli')

答案 5 :(得分:0)

考虑名为 .parquetdata 文件

parquet_file = '../data.parquet'

open( parquet_file, 'w+' )

然后使用 pandas.to_parquet(此函数需要 fastparquetpyarrow 库)

parquet_df.to_parquet(parquet_file)

然后,使用 pandas.read_parquet() 获取数据帧

new_parquet_df = pd.read_parquet(parquet_file)