如何在 Python 中读写 Parquet 文件

Parquet 是一种列式存储格式,专门用于大规模数据处理。它提供了高效的压缩和列存储,使得处理大规模数据变得更加容易和高效。Python 提供了多种方式读写 Parquet 文件,本文将对其中两种常见的方式进行详细介绍。

  1. 使用 PyArrow 库读写 Parquet 文件

PyArrow 是一个支持多种数据格式的 Python 库,其中包括了对 Parquet 文件格式的支持。在使用 PyArrow 读写 Parquet 文件之前,需要安装 PyArrow 库并将其导入。通过以下代码可以进行安装和导入:

!pip install pyarrow
import pyarrow as pa
import pyarrow.parquet as pq

首先,我们需要将一个 Pandas DataFrame 写入一个 Parquet 文件,可以通过以下代码实现:

data = {'name': ['Alice', 'Bob', 'Charlie'],
        'age': [25, 30, 35],
        'gender': ['F', 'M', 'M']}

df = pd.DataFrame(data)
table = pa.Table.from_pandas(df)
pq.write_table(table, 'example.parquet')

以上代码中,我们首先创建了一个 DataFrame,将其转换为 PyArrow 中的 Table,然后使用 pq.write_table 将其写入 Parquet 文件中。

接下来,我们可以读取刚才创建的 Parquet 文件,并将其中的数据转换为 Pandas DataFrame:

table = pq.read_table('example.parquet')
df = table.to_pandas()
print(df)

通过以上代码,我们可以得到写入文件的 DataFrame:

       name  age gender
0     Alice   25      F
1       Bob   30      M
2  Charlie   35      M

需要注意的是,在使用 PyArrow 读写 Parquet 文件时,需要注意数据类型的兼容性问题。例如,在以 UTF-8 编码保存字符串时,需要将其转换为 PyArrow 中的 StringType。可以通过以下代码进行转换:

df['name'] = pa.array(df['name'], pa.string())
  1. 使用 Fastparquet 库读写 Parquet 文件

Fastparquet 是另一个 Python 库,用于读写 Parquet 文件。与 PyArrow 不同的是,Fastparquet 主要使用 Python 原生代码实现,因此在某些情况下可能会更适合某些用户的需求。在使用 Fastparquet 读写 Parquet 文件之前,需要安装 Fastparquet 并将其导入:

!pip install fastparquet
from fastparquet import write, ParquetFile

同样,我们可以根据一个 DataFrame 创建一个 Parquet 文件:

data = {'name': ['Alice', 'Bob', 'Charlie'],
        'age': [25, 30, 35],
        'gender': ['F', 'M', 'M']}
df = pd.DataFrame(data)
write('example.parquet', df)

接下来,我们可以读取刚才写入的 Parquet 文件,并将其中的数据转换为 Pandas DataFrame:

pf = ParquetFile('example.parquet')
df = pf.to_pandas()
print(df)

在使用 Fastparquet 读写 Parquet 文件时,同样需要注意数据类型的兼容性问题。例如,在保存字符串时,默认使用了独有的枚举值进行编码,因此某些数据类型可能需要手动调整。可以通过以下代码对一个字符串列进行转换:

pf.write(df, file=outfile,compression='GZIP',
         object_encoding={
             'name': 'UTF8',
         })

需要注意的是,在写入和读取 Parquet 文件时,推荐使用 gzip 等压缩算法对文件进行压缩,这可以极大地减小文件的大小,提高处理速度。

总结

本文介绍了在 Python 中读写 Parquet 文件的两种常见方法,分别是使用 PyArrow 和 Fastparquet。在使用这些方法时,需要注意数据类型的兼容性问题,同时推荐使用 gzip 等压缩算法对文件进行压缩,以提高处理速度。