如何在不建立集群计算基础架构(例如Hadoop或Spark)的情况下,将大小适中的Parquet数据集读取到内存中的Pandas DataFrame中?我只想在笔记本电脑上使用简单的Python脚本在内存中读取这些数据,但是数量很少。数据不驻留在HDFS上。它位于本地文件系统上,也可能位于S3中。我不想启动并配置其他服务,例如Hadoop,Hive或Spark。
我以为Blaze / Odo可以做到这一点:Odo文档中提到了Parquet,但是这些示例似乎都是通过外部Hive运行时进行的。
如何在不建立集群计算基础架构(例如Hadoop或Spark)的情况下,将大小适中的Parquet数据集读取到内存中的Pandas DataFrame中?我只想在笔记本电脑上使用简单的Python脚本在内存中读取这些数据,但是数量很少。数据不驻留在HDFS上。它位于本地文件系统上,也可能位于S3中。我不想启动并配置其他服务,例如Hadoop,Hive或Spark。
我以为Blaze / Odo可以做到这一点:Odo文档中提到了Parquet,但是这些示例似乎都是通过外部Hive运行时进行的。
import pyarrow.parquet as pq; df = pq.read_table('dataset.parq').to_pandas()
Answers:
pandas 0.21引入了Parquet的新功能:
pd.read_parquet('example_pa.parquet', engine='pyarrow')
要么
pd.read_parquet('example_fp.parquet', engine='fastparquet')
上面的链接说明:
这些引擎非常相似,应该读取/写入几乎相同的镶木地板格式文件。这些库的不同之处在于它们具有不同的基础依赖性(使用numba进行快速拼写,而pyarrow使用c库)。
pd.read_parquet()
返回“ Snappy Error”问题,请运行conda install python-snappy
以安装snappy。
更新:自从我回答这个问题以来,在Apache Arrow上进行了大量工作以更好地读取和写入镶木地板。另外:http : //wesmckinney.com/blog/python-parquet-multithreading/
有一个Python实木复合地板阅读器相对较好地工作:https : //github.com/jcrobak/parquet-python
它将创建python对象,然后您必须将它们移动到Pandas DataFrame,因此该过程将比pd.read_csv
例如慢。
pd.read_parquet
现在是大熊猫的一部分。另一个答案应标记为有效。