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

oct*_*onC 22 python snappy apache-spark parquet apache-spark-sql

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

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

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

rkr*_*rzr 17

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

  1. fastparquet
  2. pyarrow

它们似乎仍处于繁重的开发阶段,并且它们带有许多免责声明(例如,不支持嵌套数据),因此您必须检查它们是否支持您需要的所有内容.

老答案:

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

如果你只需要阅读 Parquet文件就有python-parquet.

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


Dat*_*med 9

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

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

import pyarrow as pa
import pyarrow.parquet as pq
Run Code Online (Sandbox Code Playgroud)

首先,将数据帧写入表dfpyarrow

# Convert DataFrame to Apache Arrow Table
table = pa.Table.from_pandas(df_image_0)
Run Code Online (Sandbox Code Playgroud)

其次,将其写入table文件parquetfile_name.parquet

# Parquet with Brotli compression
pq.write_table(table, 'file_name.parquet')
Run Code Online (Sandbox Code Playgroud)

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

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

采用 Snappy 压缩的 Parquet

 pq.write_table(table, 'file_name.parquet')
Run Code Online (Sandbox Code Playgroud)

采用 GZIP 压缩的 Parquet

pq.write_table(table, 'file_name.parquet', compression='GZIP')
Run Code Online (Sandbox Code Playgroud)

采用 Brotli 压缩的 Parquet

pq.write_table(table, 'file_name.parquet', compression='BROTLI')
Run Code Online (Sandbox Code Playgroud)

不同规格实木复合地板的比较

在此输入图像描述

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


Mua*_*adi 7

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

from fastparquet import write
write('outfile.parq', df)
Run Code Online (Sandbox Code Playgroud)


rju*_*ney 6

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

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


Gra*_*non 5

使用fastparquet您可以编写一个 pandasdf来进行镶木地板snappygzip压缩,如下所示:

确保您已安装以下内容:

$ conda install python-snappy
$ conda install fastparquet
Run Code Online (Sandbox Code Playgroud)

做进口

import pandas as pd 
import snappy
import fastparquet
Run Code Online (Sandbox Code Playgroud)

假设你有以下熊猫df

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

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

df.to_parquet('df.snap.parquet',compression='snappy')
Run Code Online (Sandbox Code Playgroud)

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

df.to_parquet('df.gzip.parquet',compression='gzip')
Run Code Online (Sandbox Code Playgroud)

查看:

将 parquet 读回 pandasdf

pd.read_parquet('df.snap.parquet')
Run Code Online (Sandbox Code Playgroud)

或者

pd.read_parquet('df.gzip.parquet')
Run Code Online (Sandbox Code Playgroud)

输出:

   col1 col2
0   1    3
1   2    4
Run Code Online (Sandbox Code Playgroud)