我很难找到一个允许使用 Python 编写 Parquet 文件的库。如果我可以结合使用 Snappy 或类似的压缩机制,则可以加分。
到目前为止,我发现的唯一方法是使用带有pyspark.sql.DataFrame
Parquet 支持的 Spark。
我有一些脚本需要编写不是 Spark 作业的 Parquet 文件。有什么方法可以在 Python 中编写不涉及的 Parquet 文件pyspark.sql
吗?
我很难找到一个允许使用 Python 编写 Parquet 文件的库。如果我可以结合使用 Snappy 或类似的压缩机制,则可以加分。
到目前为止,我发现的唯一方法是使用带有pyspark.sql.DataFrame
Parquet 支持的 Spark。
我有一些脚本需要编写不是 Spark 作业的 Parquet 文件。有什么方法可以在 Python 中编写不涉及的 Parquet 文件pyspark.sql
吗?
更新(2017 年 3 月):目前有2 个库能够编写Parquet 文件:
它们似乎都在大力开发中,并且带有许多免责声明(例如不支持嵌套数据),因此您必须检查它们是否支持您需要的一切。
旧答案:
截至 2.2016 年,似乎没有能够编写Parquet 文件的仅 python 库。
如果您只需要阅读Parquet 文件,则可以使用 python-parquet。
作为一种解决方法,您将不得不依赖其他一些进程,例如 eg pyspark.sql
(它使用 Py4J 并在 JVM 上运行,因此不能直接从您的普通 CPython 程序中使用)。
fastparquet确实有写支持,这是一个将数据写入文件的片段
from fastparquet import write
write('outfile.parq', df)
假设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
文件parquet
说file_name.parquet
# Parquet with Brotli compression
pq.write_table(table, 'file_name.parquet')
采用 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/
我编写了 Python 和 Parquet 的综合指南,重点是利用 Parquet 的三个主要优化:列存储、列压缩和数据分区。还有第四个优化尚未涵盖,行组,但它们并不常用。在 Python 中使用 Parquet 的方式有 pandas、PyArrow、fastparquet、PySpark、Dask 和 AWS Data Wrangler。
在此处查看帖子:Pandas、PyArrow、fastparquet、AWS Data Wrangler、PySpark 和 Dask 中的 Python 和 Parquet 性能
使用您可以使用或压缩fastparquet
将 pandas 写入df
镶木地板,如下所示:snappy
gzip
确保您已安装以下内容:
$ 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
pyspark
似乎是现在用 python 写出镶木地板的最佳选择。这看起来像是用剑代替针,但目前就是这样。
简单地做,pip install pyspark
你就可以开始了。
https://spark.apache.org/docs/latest/sql-data-sources-parquet.html
另外两个用于快速 CSV => parquet 转换的 Python 库:
可能没有 fastparquet 的所有花里胡哨,但确实快速且易于掌握。
编辑 Polars 可以使用 Arrows 编写 parquet,它支持新的 parquet 版本和选项: https ://arrow.apache.org/docs/python/generated/pyarrow.parquet.write_table.html