使用 Python 编写 Parquet 文件的方法?
Methods for writing Parquet files using Python?
我找不到允许使用 Python 编写 Parquet 文件的库。如果我可以结合使用 Snappy 或类似的压缩机制,则加分。
到目前为止,我发现的唯一方法是使用支持 pyspark.sql.DataFrame
Parquet 的 Spark。
我有一些脚本需要编写不是 Spark 作业的 Parquet 文件。有没有什么方法可以在 Python 中编写不涉及 pyspark.sql
的 Parquet 文件?
更新(2017 年 3 月): 目前有 2 个库能够 编写 Parquet文件:
它们似乎都仍在大力开发中,并且它们带有许多免责声明(例如不支持嵌套数据),因此您必须检查它们是否支持您需要的一切。
旧答案:
截至 2.2016,似乎没有 python-only 库能够编写 Parquet 文件。
如果您只需要读取 Parquet 文件,那么有python-parquet.
作为解决方法,您将不得不依赖其他一些流程,例如pyspark.sql
(它使用 Py4J 并在 JVM 上运行,因此不能直接从普通的 CPython 程序中使用)。
fastparquet 确实有写入支持,这里是将数据写入文件的片段
from fastparquet import write
write('outfile.parq', df)
使用fastparquet
,您可以使用snappy
或gzip
压缩编写pandas df
镶木地板,如下所示:
确保您已安装以下内容:
$ conda install python-snappy
$ conda install fastparquet
做进口
import pandas as pd
import snappy
import fastparquet
假设您有以下 pandas 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')
检查:
将镶木地板读回 pandas df
pd.read_parquet('df.snap.parquet')
或
pd.read_parquet('df.gzip.parquet')
输出:
col1 col2
0 1 3
1 2 4
pyspark
似乎是目前用 python 写出镶木地板的最佳选择。看似以刀代针,但现在就是这样。
- 它支持大多数压缩类型,如 lzo、snappy。 Zstd 支持应该很快就会出现。
- 具有完整的模式支持(嵌套、结构等)
简单地做,pip install pyspark
就可以了。
https://spark.apache.org/docs/latest/sql-data-sources-parquet.html
将 pandas 数据帧写入 parquet 的简单方法。
假设,df
是 pandas 数据帧。我们需要导入以下库。
import pyarrow as pa
import pyarrow.parquet as pq
首先,将dataframe df
写入pyarrow
table.
# 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(默认,不需要参数)
- Gzip
- 布罗特里
采用 Snappy 压缩的 Parquet
pq.write_table(table, 'file_name.parquet')
使用 GZIP 压缩的 Parquet
pq.write_table(table, 'file_name.parquet', compression='GZIP')
使用 Brotli 压缩的 Parquet
pq.write_table(table, 'file_name.parquet', compression='BROTLI')
不同格式parquet实现的对比
参考:
https://tech.jda.com/efficient-dataframe-storage-with-apache-parquet/
我写了一份关于 Python 和 Parquet 的综合指南,重点介绍如何利用 Parquet 的三个主要优化:列式存储、列压缩 和数据分区。还有第四种优化尚未涉及,即行组,但它们并不常用。在 Python 中使用 Parquet 的方法有 pandas、PyArrow、fastparquet、PySpark、Dask 和 AWS Data Wrangler。
在此处查看 post:Python and Parquet Performance In Pandas, PyArrow, fastparquet, AWS Data Wrangler, PySpark and Dask
另外两个 Python 用于快速 CSV => parquet 转换的库:
可能没有 fastparquet 的所有花里胡哨的功能,但确实快速且易于掌握。
编辑
Polars 可以使用 Arrows 编写 parquet,它支持新的 parquet 版本和选项:
https://arrow.apache.org/docs/python/generated/pyarrow.parquet.write_table.html
我找不到允许使用 Python 编写 Parquet 文件的库。如果我可以结合使用 Snappy 或类似的压缩机制,则加分。
到目前为止,我发现的唯一方法是使用支持 pyspark.sql.DataFrame
Parquet 的 Spark。
我有一些脚本需要编写不是 Spark 作业的 Parquet 文件。有没有什么方法可以在 Python 中编写不涉及 pyspark.sql
的 Parquet 文件?
更新(2017 年 3 月): 目前有 2 个库能够 编写 Parquet文件:
它们似乎都仍在大力开发中,并且它们带有许多免责声明(例如不支持嵌套数据),因此您必须检查它们是否支持您需要的一切。
旧答案:
截至 2.2016,似乎没有 python-only 库能够编写 Parquet 文件。
如果您只需要读取 Parquet 文件,那么有python-parquet.
作为解决方法,您将不得不依赖其他一些流程,例如pyspark.sql
(它使用 Py4J 并在 JVM 上运行,因此不能直接从普通的 CPython 程序中使用)。
fastparquet 确实有写入支持,这里是将数据写入文件的片段
from fastparquet import write
write('outfile.parq', df)
使用fastparquet
,您可以使用snappy
或gzip
压缩编写pandas df
镶木地板,如下所示:
确保您已安装以下内容:
$ conda install python-snappy
$ conda install fastparquet
做进口
import pandas as pd
import snappy
import fastparquet
假设您有以下 pandas 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')
检查:
将镶木地板读回 pandas df
pd.read_parquet('df.snap.parquet')
或
pd.read_parquet('df.gzip.parquet')
输出:
col1 col2
0 1 3
1 2 4
pyspark
似乎是目前用 python 写出镶木地板的最佳选择。看似以刀代针,但现在就是这样。
- 它支持大多数压缩类型,如 lzo、snappy。 Zstd 支持应该很快就会出现。
- 具有完整的模式支持(嵌套、结构等)
简单地做,pip install pyspark
就可以了。
https://spark.apache.org/docs/latest/sql-data-sources-parquet.html
将 pandas 数据帧写入 parquet 的简单方法。
假设,df
是 pandas 数据帧。我们需要导入以下库。
import pyarrow as pa
import pyarrow.parquet as pq
首先,将dataframe df
写入pyarrow
table.
# 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(默认,不需要参数)
- Gzip
- 布罗特里
采用 Snappy 压缩的 Parquet
pq.write_table(table, 'file_name.parquet')
使用 GZIP 压缩的 Parquet
pq.write_table(table, 'file_name.parquet', compression='GZIP')
使用 Brotli 压缩的 Parquet
pq.write_table(table, 'file_name.parquet', compression='BROTLI')
不同格式parquet实现的对比
参考: https://tech.jda.com/efficient-dataframe-storage-with-apache-parquet/
我写了一份关于 Python 和 Parquet 的综合指南,重点介绍如何利用 Parquet 的三个主要优化:列式存储、列压缩 和数据分区。还有第四种优化尚未涉及,即行组,但它们并不常用。在 Python 中使用 Parquet 的方法有 pandas、PyArrow、fastparquet、PySpark、Dask 和 AWS Data Wrangler。
在此处查看 post:Python and Parquet Performance In Pandas, PyArrow, fastparquet, AWS Data Wrangler, PySpark and Dask
另外两个 Python 用于快速 CSV => parquet 转换的库:
可能没有 fastparquet 的所有花里胡哨的功能,但确实快速且易于掌握。
编辑 Polars 可以使用 Arrows 编写 parquet,它支持新的 parquet 版本和选项: https://arrow.apache.org/docs/python/generated/pyarrow.parquet.write_table.html