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

时间:2016-12-09 18:20:54

标签: python-3.x hdfs parquet

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

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

6 个答案:

答案 0 :(得分:8)

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

df.to_parquet('myfile.parquet')

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

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

答案 1 :(得分:7)

有一个名为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')

答案 2 :(得分:2)

pyarrow支持存储pandas数据帧:

import pyarrow

pyarrow.Table.from_pandas(dataset)

答案 3 :(得分:1)

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

import pandas as pd 

设置测试数据框

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

导入所需的实木复合地板库(确保已安装此木地板,我使用过: $ conda install fastparquet

import fastparquet

将数据框转换为镶木地板并保存到当前目录

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

读取当前目录中的实木复合地板文件,重新放入熊猫数据框

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

输出:

    col1    col2
0    1       3
1    2       4

答案 4 :(得分:1)

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

答案 5 :(得分:0)

是的,pandas支持以对角线格式保存数据框。

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

假设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')

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

  • Snappy(默认,不需要任何参数)
  • gzip
  • brotli

具有活泼压缩的实木复合地板

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

使用不同形式的实木复合地板实现比较比较

enter image description here

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