HDFS Python:将Pandas数据框保存到 parquet 文件

mznpcxlj  于 2022-12-09  发布在  HDFS
关注(0)|答案(8)|浏览(819)

是否可以将Pandas的数据框直接保存到 parquet 文件中?如果不能,建议的过程是什么?
我们的目标是能够将 parquet 文件发送给另一个团队,他们可以使用scala代码来读取/打开它。谢谢!

uklbhaso

uklbhaso1#

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

df.to_parquet('myfile.parquet')

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

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

2uluyalo2#

Yes panda支持以 parquet 格式保存 Dataframe 。

将Pandas Dataframe 写入 parquet 的简单方法。

假设df是Pandas Dataframe ,我们需要导入以下库。

import pyarrow as pa
import pyarrow.parquet as pq

首先,将 Dataframe 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(默认值,不需要参数)
  • 压缩
  • 布罗特利

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

使用不同规格的 parquet 进行对比

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

fnatzsnv

fnatzsnv3#

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

7kqas0il4#

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

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

wqnecbli5#

pyarrow支持存储panda Dataframe :

import pyarrow

pyarrow.Table.from_pandas(dataset)
4ktjp1zp

4ktjp1zp6#

这是对我起作用的方法-类似于上面的方法-但是也选择规定压缩类型:
设置测试 Dataframe

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

将数据框转换为 parquet 格式并保存到当前目录

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

读取当前目录中的parquet文件,返回到Pandas数据框中

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

输出:

col1    col2
0    1       3
1    2       4
ie3xauqp

ie3xauqp7#

**Pandas直接支撑 parquet **

df.to_parquet('df.parquet.gzip', compression='gzip')
# this will convert the df to parquet format

df_parquet = pd.read_parquet('df.parquet.gzip')
# This will read the parquet file

df.to_csv('filename.csv')
# this will convert back the parquet to CSV
lxkprmvk

lxkprmvk8#

是的,很有可能将pandas dataframe写入binary parquet。需要一些额外的库,如pyarrowfastparquet

import pyarrow 
import pandas as pd
#read parquet file into pandas dataframe
df=pd.read_parquet('file_location/file_path.parquet',engine='pyarrow')
#writing dataframe back to source file
df.to_parquet('file_location/file_path.parquet', engine='pyarrow')

相关问题