我找不到允许使用Python编写Parquet文件的库。如果我可以使用Snappy或类似的压缩机制,可以获得奖励积分。
到目前为止,我发现的唯一方法是使用Spark pyspark.sql.DataFrame
Parquet支持。
我有一些脚本需要编写非Spark作业的Parquet文件。是否有任何方法在Python中编写Parquet文件并不涉及pyspark.sql
?
答案 0 :(得分:16)
更新(2017年3月):目前 2 库正在撰写 Parquet文件:
它们似乎仍然处于严重的发展状态,它们带有许多免责声明(例如,不支持嵌套数据),因此您必须检查它们是否支持您需要的所有内容。
老答案:
截至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
,您可以通过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
答案 4 :(得分:0)
pyspark
似乎是用python写出实木复合地板的最佳选择。看起来好像用剑代替了针,但这就是目前的情况。
只需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')
具有活泼压缩的实木复合地板
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')
参考: https://tech.jda.com/efficient-dataframe-storage-with-apache-parquet/