我想以镶木地板格式将数据帧写入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')
有人有等同于实木复合地板的东西吗? 谢谢
答案 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)