如何将Parquet文件读入Pandas DataFrame?

Dan*_*ler 45 python pandas blaze parquet

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

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

chr*_*ock 61

pandas 0.21 为Parquet引入了新功能:

pd.read_parquet('example_pa.parquet', engine='pyarrow')
Run Code Online (Sandbox Code Playgroud)

要么

pd.read_parquet('example_fp.parquet', engine='fastparquet')
Run Code Online (Sandbox Code Playgroud)

以上链接说明:

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

  • 对于我的大多数数据,'fastparquet'要快一点.为了防止`pd.read_parquet()`返回Snappy Error的问题,运行`conda install python-snappy`来安装snappy. (3认同)
  • 我与@Seb 的经历相反。fastparquet 有很多问题,pyarrow 很简单 pip install 然后我就走了 (3认同)

dan*_*frg 16

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

有一个蟒蛇拼花阅读器相对较好:https://github.com/jcrobak/parquet-python

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

  • 实际上有pyarrow允许读/写:http://pyarrow.readthedocs.io/en/latest/parquet.html (9认同)

小智 12

实木复合地板

第 1 步:使用数据

df = pd.DataFrame({
    'student': ['personA007', 'personB', 'x', 'personD', 'personE'],
    'marks': [20,10,22,21,22],
})
Run Code Online (Sandbox Code Playgroud)

第 2 步:另存为 Parquet

df.to_parquet('sample.parquet')
Run Code Online (Sandbox Code Playgroud)

第 3 步:从 Parquet 读取

df = pd.read_parquet('sample.parquet')
Run Code Online (Sandbox Code Playgroud)


WY *_*Hsu 10

除了 Pandas,Apache pyarrow 还提供了将 parquet 转换为 dataframe 的方法

代码很简单,只需输入:

import pyarrow.parquet as pq

df = pq.read_table(source=your_file_path).to_pandas()
Run Code Online (Sandbox Code Playgroud)

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