Python:将熊猫数据框保存到镶木地板文件

Posted

技术标签:

【中文标题】Python:将熊猫数据框保存到镶木地板文件【英文标题】:Python: save pandas data frame to parquet file 【发布时间】:2017-04-25 07:06:16 【问题描述】:

是否可以将 pandas 数据框直接保存到 parquet 文件中? 如果不是,建议的流程是什么?

目的是能够将镶木地板文件发送给另一个团队,他们可以使用 scala 代码读取/打开它。谢谢!

【问题讨论】:

其他团队是否在使用 Spark 或其他一些 Scala 工具?加载 CSV 是 Spark 非常简单 如果你有pyspark,你可以做类似this的事情 【参考方案1】:

这是对我有用的方法 - 类似于上面 - 但也选择规定压缩类型:

设置测试数据框

df = pd.DataFrame(data='col1': [1, 2], 'col2': [3, 4])

将数据框转换为拼花并保存到当前目录

df.to_parquet('df.parquet.gzip', compression='gzip')

读取当前目录下的 parquet 文件,返回 pandas 数据框

pd.read_parquet('df.parquet.gzip')

输出:

    col1    col2
0    1       3
1    2       4

【讨论】:

当我们不使用它的任何东西时,为什么我们需要导入?【参考方案2】:

是的,pandas 支持以 parquet 格式保存数据帧。

将 pandas 数据帧写入 parquet 的简单方法。

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

import pyarrow as pa
import pyarrow.parquet as pq

首先,将数据帧df 写入pyarrow 表中。

# 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')

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

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

采用 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')

用不同格式的镶木地板进行比较

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

【讨论】:

【参考方案3】:

是的,这是可能的。这是示例代码:

import pyarrow as pa
import pyarrow.parquet as pq

df = pd.DataFrame(data='col1': [1, 2], 'col2': [3, 4])
table = pa.Table.from_pandas(df, preserve_index=True)
pq.write_table(table, 'output.parquet')

【讨论】:

【参考方案4】:

Pandas 有一个核心功能to_parquet()。只需将数据框写入 parquet 格式,如下所示:

df.to_parquet('myfile.parquet')

您仍然需要安装 parquet 库,例如 fastparquet。如果您安装了多个 parquet 库,您还需要指定您希望 pandas 使用哪个引擎,否则将需要安装第一个引擎(如documentation)。例如:

df.to_parquet('myfile.parquet', engine='fastparquet')

【讨论】:

在 Databricks 7.1 (python 3.7.5) 中运行它,我得到 'DataFrame' object has no attribute 'toParquet' 嗯,这似乎很简单:没有 toParquet,没有。这是 to_parquet。干杯! pandas.pydata.org/pandas-docs/stable/reference/api/…【参考方案5】:

pyarrow 支持存储 pandas 数据帧:

import pyarrow

pyarrow.Table.from_pandas(dataset)

【讨论】:

【参考方案6】:

有一个名为 fastparquet 的包的相对较早的实现 - 它可能是您需要的一个很好的用例。

https://github.com/dask/fastparquet

conda install -c conda-forge fastparquet

pip install fastparquet

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

或者,如果你想使用一些文件选项,比如行分组/压缩:

write('outfile2.parq', df, row_group_offsets=[0, 10000, 20000], compression='GZIP', file_scheme='hive')

【讨论】:

以上是关于Python:将熊猫数据框保存到镶木地板文件的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将巨大的 dask 数据框保存到镶木地板中?

将rdd保存到镶木地板文件scala

使用 python 和 pandas 传输和写入 Parquet 得到时间戳错误

带有 hive 的 pyspark - 无法正确创建分区并从数据框中保存表

编写拼花文件时如何避免空文件?

无法将数据附加到镶木地板 [FileAlreadyExists 异常]