34

我很难找到一个允许使用 Python 编写 Parquet 文件的库。如果我可以结合使用 Snappy 或类似的压缩机制,则可以加分。

到目前为止,我发现的唯一方法是使用带有pyspark.sql.DataFrameParquet 支持的 Spark。

我有一些脚本需要编写不是 Spark 作业的 Parquet 文件。有什么方法可以在 Python 中编写不涉及的 Parquet 文件pyspark.sql吗?

4

7 回答 7

20

更新(2017 年 3 月):目前有2 个库能够编写Parquet 文件:

  1. 快速镶木地板
  2. 皮箭

它们似乎都在大力开发中,并且带有许多免责声明(例如不支持嵌套数据),因此您必须检查它们是否支持您需要的一切。

旧答案:

截至 2.2016 年,似乎没有能够编写Parquet 文件的仅 python 库。

如果您只需要阅读Parquet 文件,则可以使用 python-parquet

作为一种解决方法,您将不得不依赖其他一些进程,例如 eg pyspark.sql(它使用 Py4J 并在 JVM 上运行,因此不能直接从您的普通 CPython 程序中使用)。

于 2016-02-03T17:12:11.480 回答
7

fastparquet确实有写支持,这是一个将数据写入文件的片段

from fastparquet import write
write('outfile.parq', df)
于 2017-01-03T08:42:38.760 回答
5

将熊猫数据框写入镶木地板的简单方法。

假设df是熊猫数据框。我们需要导入以下库。

import pyarrow as pa
import pyarrow.parquet as pq

首先,将数据框df写入pyarrow表中。

# Convert DataFrame to Apache Arrow Table
table = pa.Table.from_pandas(df_image_0)

二、写入table文件parquetfile_name.parquet

# Parquet with Brotli compression
pq.write_table(table, 'file_name.parquet')

注意:拼花文件可以在写入时进一步压缩。以下是流行的压缩格式。

  • Snappy(默认,不需要参数)
  • 压缩包
  • 布罗特利

采用 Snappy 压缩的 Parquet

 pq.write_table(table, 'file_name.parquet')

采用 GZIP 压缩的 Parquet

pq.write_table(table, 'file_name.parquet', compression='GZIP')

Brotli 压缩实木复合地板

pq.write_table(table, 'file_name.parquet', compression='BROTLI')

不同形式的镶木地板的比较比较

在此处输入图像描述

参考: https ://tech.jda.com/efficient-dataframe-storage-with-apache-parquet/

于 2019-12-31T03:20:22.637 回答
5

我编写了 Python 和 Parquet 的综合指南,重点是利用 Parquet 的三个主要优化:列存储列压缩数据分区。还有第四个优化尚未涵盖,行组,但它们并不常用。在 Python 中使用 Parquet 的方式有 pandas、PyArrow、fastparquet、PySpark、Dask 和 AWS Data Wrangler。

在此处查看帖子:Pandas、PyArrow、fastparquet、AWS Data Wrangler、PySpark 和 Dask 中的 Python 和 Parquet 性能

于 2020-11-02T21:39:34.887 回答
4

使用您可以使用或压缩fastparquet将 pandas 写入df镶木地板,如下所示:snappygzip

确保您已安装以下内容:

$ conda install python-snappy
$ conda install fastparquet

做进口

import pandas as pd 
import snappy
import fastparquet

假设您有以下熊猫df

df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})

通过压缩发送df到镶木地板snappy

df.to_parquet('df.snap.parquet',compression='snappy')

通过压缩发送df到镶木地板gzip

df.to_parquet('df.gzip.parquet',compression='gzip')

查看:

将镶木地板读回熊猫df

pd.read_parquet('df.snap.parquet')

或者

pd.read_parquet('df.gzip.parquet')

输出:

   col1 col2
0   1    3
1   2    4
于 2018-10-04T13:41:48.033 回答
1

pyspark似乎是现在用 python 写出镶木地板的最佳选择。这看起来像是用剑代替针,但目前就是这样。

  • 它支持大多数压缩类型,如 lzo、snappy。Zstd 支持应该很快就会出现。
  • 具有完整的模式支持(嵌套、结构等)

简单地做,pip install pyspark你就可以开始了。

https://spark.apache.org/docs/latest/sql-data-sources-parquet.html

于 2019-09-14T01:48:16.547 回答
0

另外两个用于快速 CSV => parquet 转换的 Python 库:

  1. DuckDB https://duckdb.org
  2. 极地https://github.com/pola-rs/polars

可能没有 fastparquet 的所有花里胡哨,但确实快速且易于掌握。

编辑 Polars 可以使用 Arrows 编写 parquet,它支持新的 parquet 版本和选项: https ://arrow.apache.org/docs/python/generated/pyarrow.parquet.write_table.html

于 2021-11-04T14:19:12.060 回答