使用Python编写Parquet文件的方法?

时间:2015-10-05 02:18:28

标签: python apache-spark apache-spark-sql parquet snappy

我找不到允许使用Python编写Parquet文件的库。如果我可以使用Snappy或类似的压缩机制,可以获得奖励积分。

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

我有一些脚本需要编写非Spark作业的Parquet文件。是否有任何方法在Python中编写Parquet文件并不涉及pyspark.sql

6 个答案:

答案 0 :(得分:16)

更新(2017年3月):目前 2 正在撰写 Parquet文件:

  1. fastparquet
  2. pyarrow
  3. 它们似乎仍然处于严重的发展状态,它们带有许多免责声明(例如,不支持嵌套数据),因此您必须检查它们是否支持您需要的所有内容。

    老答案:

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

    如果您只需要读取 Parquet文件,则会python-parquet

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

答案 1 :(得分:4)

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

from fastparquet import write
write('outfile.parq', df)

答案 2 :(得分:3)

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

在此处查看帖子:Python and Parquet Performance In Pandas, PyArrow, fastparquet, AWS Data Wrangler, PySpark and Dask

答案 3 :(得分:1)

使用fastparquet,您可以通过dfsnappy压缩将大熊猫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

答案 4 :(得分:0)

pyspark似乎是用python写出实木复合地板的最佳选择。看起来好像用剑代替了针,但这就是目前的情况。

  • 它支持大多数压缩类型,例如lzo,snappy。 Zstd支持应该很快加入。
  • 具有完整的架构支持(嵌套,结构等)

只需pip install pyspark,您就可以开始了。

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

答案 5 :(得分:0)

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

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

import pyarrow as pa
import pyarrow.parquet as pq

首先,将datafrmae df写入pyarrow表中。

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

第二,将table写到paraquet文件中,说file_name.paraquet

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

注意:编写时可以进一步压缩paraquet文件。以下是流行的压缩格式。

  • Snappy(默认,不需要任何参数)
  • gzip
  • brotli

具有活泼压缩的实木复合地板

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

具有GZIP压缩功能的实木复合地板

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

具有Brotli压缩功能的实木复合地板

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

使用不同形式的实木复合地板实现比较比较

enter image description here

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