Eda*_*ame 10 hdfs python-3.x parquet
是否可以将pandas数据框直接保存到镶木地板文件中?如果没有,建议的过程是什么?
目的是能够将镶木地板文件发送给另一个团队,他们可以使用scala代码来读取/打开它.谢谢!
Dat*_*med 11
假设,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)
其次,编写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 压缩的镶木地板
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)
有一个名为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)
对的,这是可能的。这是示例代码:
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)