Python:将pandas数据框保存到镶木地板文件中

Eda*_*ame 10 hdfs python-3.x parquet

是否可以将pandas数据框直接保存到镶木地板文件中?如果没有,建议的过程是什么?

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

Dat*_*med 11

是的,pandas 支持以镶木地板格式保存数据框。

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

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

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)

其次,编写tableparquet文件发言权file_name.parquet

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

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

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

带有 Snappy 压缩的 Parquet

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

带 GZIP 压缩的镶木地板

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

带有 Brotli 压缩的镶木地板

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

与不同格式的镶木地板的比较

在此处输入图片说明

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


ben*_*941 10

熊猫有核心功能to_parquet().只需将数据框写入镶木地板格式,如下所示:

df.to_parquet('myfile.parquet')
Run Code Online (Sandbox Code Playgroud)

你仍然需要安装一个木地板库,如fastparquet.如果您安装了多个镶木地板库,则还需要指定要使用哪个引擎的pandas,否则将需要安装第一个(如文档中所示).例如:

df.to_parquet('myfile.parquet', engine='fastparquet')
Run Code Online (Sandbox Code Playgroud)


Mar*_*k S 7

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

https://github.com/dask/fastparquet

conda install -c conda-forge fastparquet
Run Code Online (Sandbox Code Playgroud)

要么

pip install fastparquet

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

或者,如果您想使用某些文件选项,例如行分组/压缩:

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


Lio*_*nel 6

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

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')
Run Code Online (Sandbox Code Playgroud)