如何读取一个 parquet 文件到Pandas数据框?

hmae6n7t  于 2023-03-06  发布在  其他
关注(0)|答案(8)|浏览(260)

如何在不设置Hadoop或Spark等集群计算基础设施的情况下,将中等大小的Parquet数据集读入内存中的Pandas DataFrame?这只是我希望在笔记本电脑上使用简单的Python脚本在内存中读取的中等数量的数据。这些数据并不驻留在HDFS中。它们要么在本地文件系统中,要么可能在S3中。我不想启动和配置其他服务,如Hadoop、Hive或Spark。
我以为Blaze/Odo会让这一切成为可能:Odo文档提到了Parquet,但是示例似乎都是通过外部Hive运行时。

e4eetjau

e4eetjau1#

pandas 0.21为 parquet 引入了新功能:

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

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

上面的链接解释:
这两个引擎非常相似,应该可以读写几乎相同的parquet格式文件。这两个库的不同之处在于底层依赖不同(fastparquet使用numba,而pyarrow使用c-库)。

zsbz8rwp

zsbz8rwp2#

更新:自从我回答这个问题以来,已经有很多工作在这方面,看看Apache Arrow,以便更好地阅读和编写 parquet 。另外:http://wesmckinney.com/blog/python-parquet-multithreading/
有一个pythonParquet地板阅读器工作得相对较好:https://github.com/jcrobak/parquet-python
它将创建python对象,然后您必须将它们移动到Pandas DataFrame中,因此该过程将比pd.read_csv慢。

vsnjm48y

vsnjm48y3#

除了panda,Apachepyarrow还提供了将parquet转换为 Dataframe 的方法
代码很简单,只需键入:

import pyarrow.parquet as pq

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

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

rkkpypqq

rkkpypqq4#

Parquet地板

第1步:要使用的数据

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

步骤2:保存为Parquet

df.to_parquet('sample.parquet')

第3步:从 parquet 读取

df = pd.read_parquet('sample.parquet')
hsvhsicv

hsvhsicv5#

当写parquet的时候,考虑使用brotli压缩。我用brotli压缩得到了一个8 GB文件parquet文件的70%的压缩。Brotli使得一个比gzip,snappy,pickle更小的文件和更快的读/写。虽然pickle可以处理元组而parquet不能。

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

aemubtdh6#

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()
u0sqgete

u0sqgete7#

考虑名为data.parquet.parquet文件

parquet_file = '../data.parquet'

open( parquet_file, 'w+' )

转换为 parquet

假设有一个 Dataframe parquet_df,希望保存到上面的parquet文件中,可以使用pandas.to_parquet(此函数需要fastparquetpyarrow

parquet_df.to_parquet(parquet_file)

从 parquet 上读取

为了将parquet文件读入 Dataframe new_parquet_df,可以按如下方式使用pandas.read_parquet()

new_parquet_df = pd.read_parquet(parquet_file)
emeijp43

emeijp438#

你可以使用python来获取 parquet 数据
1.安装包pin install pandas pyarrow
2.read file

def read_parquet(file):
    result = []
    data = pd.read_parquet(file)
    for index in data.index:
        res = data.loc[index].values[0:-1]
        result.append(res)
    print(len(result))

file = "./data.parquet"
read_parquet(file)

相关问题