pandas将数据帧写入镶木地板格式并附加

时间:2017-11-08 23:48:39

标签: python apache pandas parquet

我正在尝试在pandas dataframe模式下编写parquetappend文件格式(在最新的pandas版本0.21.0中引入)。但是,不是附加到现有文件,而是使用新数据覆盖该文件。我错过了什么?

写入语法是

df.to_parquet(path, mode='append')

读取语法为

pd.read_parquet(path)

3 个答案:

答案 0 :(得分:3)

pandas.to_parquet()中没有追加模式。你可以做的是读取现有文件,更改它,然后写回来覆盖它。

答案 1 :(得分:0)

要附加,请执行以下操作:

import pandas as pd 
import pyarrow.parquet as pq
import pyarrow as pa

dataframe = pd.read_csv('content.csv')
output = "/Users/myTable.parquet"

# Create a parquet table from your dataframe
table = pa.Table.from_pandas(dataframe)

# Write direct to your parquet file
pq.write_to_dataset(table , root_path=output)

这将自动添加到您的表格中。

答案 2 :(得分:0)

我使用了aws wrangler库。就像魅力一样

以下是参考文档

https://aws-data-wrangler.readthedocs.io/en/latest/stubs/awswrangler.s3.to_parquet.html

我已经从kinesis流中读取并使用kinesis-python库来消耗消息并写入s3。我没有包括json的处理逻辑,因为本文处理无法将数据附加到s3的问题。在aws sagemaker jupyter中执行

以下是我使用的示例代码:

!pip install awswrangler
import awswrangler as wr
import pandas as pd
evet_data=pd.DataFrame({'a': [a], 'b':[b],'c':[c],'d':[d],'e': [e],'f':[f],'g': [g]},columns=['a','b','c','d','e','f','g'])
#print(evet_data)
s3_path="s3://<your bucker>/table/temp/<your folder name>/e="+e+"/f="+str(f)
try:
    wr.s3.to_parquet(
    df=evet_data,
    path=s3_path,
    dataset=True,
    partition_cols=['e','f'],
    mode="append",
    database="wat_q4_stg",
    table="raw_data_v3",
    catalog_versioning=True  # Optional
    )
    print("write successful")       
except Exception as e:
    print(str(e))

任何说明都可以为您提供帮助。在其他几篇文章中,我已阅读并读取数据并再次覆盖。但是,随着数据变大,它将减慢该过程。效率低