在S3 AWS中将pandas数据框写入实木复合地板

时间:2019-11-27 18:11:23

标签: python pandas amazon-web-services amazon-s3 parquet

我想以镶木地板格式将数据帧写入s3存储桶中。 我知道如何以csv格式编写数据帧。但是我不知道如何用实木复合地板格式书写。 这是csv格式的代码(我没有显示ServerSideEncryption和SSEKMSKeyId字段,但我在实际代码中使用了它们):

csv_to_write = df.to_csv(None).encode()
s3_client.put_object(Bucket=bucket_name,Key='data.csv', Body=csv_to_write,
              ServerSideEncryption='XXXXX', SSEKMSKeyId='XXXXXXXX')

有人有等同于实木复合地板的东西吗? 谢谢

3 个答案:

答案 0 :(得分:5)

对于python 3.6及更高版本,AWS有一个名为aws-data-wrangler的库,可帮助实现Pandas / S3 / Parquet之间的集成

安装do;

pip install awswrangler

如果要将熊猫数据框作为拼花文件写入S3,请这样做;

import awswrangler as wr
wr.s3.to_parquet(
    dataframe=df,
    path="s3://my-bucket/key/my-file.parquet"
)

如果要添加加密,请这样做;

import awswrangler as wr
extra_args = {
    "ServerSideEncryption": "aws:kms",
    "SSEKMSKeyId": "YOUR_KMY_KEY_ARN"
}
sess = wr.Session(s3_additional_kwargs=extra_args)
sess.s3.to_parquet(
    dataframe=df,
    path="s3://my-bucket/key/my-file.parquet"
)

答案 1 :(得分:0)

假设您的数据帧称为df,请使用以下代码首先将其转换为镶木地板格式并进行存储。然后将此实木复合地板文件上传到s3。

import pyarrow as pa
import pyarrow.parquet as pq
import boto3

parquet_table = pa.Table.from_pandas(df)
pq.write_table(parquet_table, local_file_name)

s3 = boto3.client('s3',aws_access_key_id='XXX',aws_secret_access_key='XXX')
s3.upload_file(local_file_name, bucket_name, remote_file_name)

答案 2 :(得分:0)

上面使用 AWS Wrangler 的优秀解决方案,但是当我尝试使用上面的示例时确实遇到错误,假设 lib 已更改。以下对我有用:

wr.s3.to_parquet(df, path=f"s3://{output_bucket}/{output_key}.parquet", index=False)