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文件:
它们似乎仍处于繁重的开发阶段,并且它们带有许多免责声明(例如,不支持嵌套数据),因此您必须检查它们是否支持您需要的所有内容.
老答案:
截至2.2016,似乎没有能够编写 Parquet文件的python-only库.
如果你只需要阅读 Parquet文件就有python-parquet.
作为一种解决方法,您将不得不依赖于其他一些过程,例如pyspark.sql(使用Py4J并在JVM上运行,因此无法直接从您的普通CPython程序中使用).
假设df是 pandas 数据框。我们需要导入以下库。
import pyarrow as pa
import pyarrow.parquet as pq
Run Code Online (Sandbox Code Playgroud)
首先,将数据帧写入表df中pyarrow。
# Convert DataFrame to Apache Arrow Table
table = pa.Table.from_pandas(df_image_0)
Run Code Online (Sandbox Code Playgroud)
其次,将其写入table文件parquet说file_name.parquet
# Parquet with Brotli compression
pq.write_table(table, 'file_name.parquet')
Run Code Online (Sandbox Code Playgroud)
采用 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/
fastparquet确实有写支持,这是一个将数据写入文件的片段
from fastparquet import write
write('outfile.parq', df)
Run Code Online (Sandbox Code Playgroud)
我编写了一份关于 Python 和 Parquet 的综合指南,重点是利用 Parquet 的三个主要优化:列式存储、列式压缩和数据分区。还有第四种优化尚未涉及,即行组,但它们并不常用。在 Python 中使用 Parquet 的方式有 pandas、PyArrow、fastparquet、PySpark、Dask 和 AWS Data Wrangler。
查看此处的帖子:Pandas、PyArrow、fastparquet、AWS Data Wrangler、PySpark 和 Dask 中的 Python 和 Parquet 性能
使用fastparquet您可以编写一个 pandasdf来进行镶木地板snappy或gzip压缩,如下所示:
确保您已安装以下内容:
$ 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)
| 归档时间: |
|
| 查看次数: |
15720 次 |
| 最近记录: |