如何将Parquet文件读入Pandas DataFrame?


81

如何在不建立集群计算基础架构(例如Hadoop或Spark)的情况下,将大小适中的Parquet数据集读取到内存中的Pandas DataFrame中?我只想在笔记本电脑上使用简单的Python脚本在内存中读取这些数据,但是数量很少。数据不驻留在HDFS上。它位于本地文件系统上,也可能位于S3中。我不想启动并配置其他服务,例如Hadoop,Hive或Spark。

我以为Blaze / Odo可以做到这一点:Odo文档中提到了Parquet,但是这些示例似乎都是通过外部Hive运行时进行的。


3
您是否碰巧可以公开获取数据?我的python-parquet github.com/martindurant/parquet-python/tree/py3分支在parquet.rparquet中有一个熊猫阅读器,您可以尝试一下。它有许多无法处理的实木复合地板构造。
mdurant

4
等待熊猫作者Wes Mckinney参与的Apache Arrow项目。完成后,用户应该能够直接从Pandas读取Parquet文件中的内容。
XValidated'Apr 9'9

4
由于该问题被关闭的题外话(但仍对谷歌的第一个结果),我有一个评论回答..您现在可以使用pyarrow读取拼花文件,并将其转换成数据帧大熊猫:import pyarrow.parquet as pq; df = pq.read_table('dataset.parq').to_pandas()
sroecker

4
Kinda对此问题感到恼火。火花和镶木地板(仍然)的记录相对较少。我也在寻找答案。
user48956 '17

2
fastparquet和pyarrow库都可以将实木复合地板文件读取到熊猫数据框中github.com/dask/fastparquetarrow.apache.org/docs/python/parquet.html
ogrisel

Answers:


101

pandas 0.21引入了Parquet的新功能

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

要么

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

上面的链接说明:

这些引擎非常相似,应该读取/写入几乎相同的镶木地板格式文件。这些库的不同之处在于它们具有不同的基础依赖性(使用numba进行快速拼写,而pyarrow使用c库)。


9
对于我的大多数数据,“ fastparquet”要快一些。以防万一pd.read_parquet()返回“ Snappy Error”问题,请运行conda install python-snappy以安装snappy。
Catbuilts '18 -10-17

我发现pyarrow很难安装(在我的本地Windows机器和云linux机器上)。即使在修复了python-snappy之后,编译器仍然存在其他问题,并且错误模块“ pyarrow”没有属性“ compat”。fastparquet完全没有问题。
勒布

1
@Catbuilts如果您没有敏捷,则可以使用gzip。

'fastparquet'可以读取',snappy.parquet'文件吗?
塞西莉亚

19

更新:自从我回答这个问题以来,在Apache Arrow上进行了大量工作以更好地读取和写入镶木地板。另外:http : //wesmckinney.com/blog/python-parquet-multithreading/

有一个Python实木复合地板阅读器相对较好地工作:https : //github.com/jcrobak/parquet-python

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


9
实际上,有一个pyarrow可以进行读/写操作:pyarrow.readthedocs.io/en/latest/parquet.html
bluszcz

当我尝试访问您的链接@bluszcz时,出现权限被拒绝错误-您有替代方法吗?
snooze_bear

1
parquet-python比fastparquet和pyarrow等替代方案要慢得多:arrow.apache.org/docs/python/parquet.html
ogrisel

1
pd.read_parquet现在是大熊猫的一部分。另一个答案应标记为有效。
ogrisel

7

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

代码很简单,只需键入:

import pyarrow.parquet as pq

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

有关更多信息,请参阅Apache pyarrow中的文档读取和写入单个文件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.