[英]How to write dictionary data in memory value directly to s3 bucket as in csv file without writing in file then uploading it
import boto3
import pandas as pd
BUCKET_NAME = ''
ACCESS_KEY_ID = ''
ACCESS_SECRET_KEY = ''
Fraudfilekey = 'fraud_CT_ID_IM_NO/ CT_PROFILE_One_to_Many_Mapping /yyyy=2021/mm=02/dd=05/2021_02_05_CT_TEST.csv'
d = {"A" : ["John","Deep","Julia","Kate","Sandy"],
"MonthSales" : [25,30,35,40,45]}
df = pd.DataFrame(d)
s3 = boto3.client('s3', region_name='ap-south-1', aws_access_key_id=ACCESS_KEY_ID,
aws_secret_access_key=ACCESS_SECRET_KEY)
def write_to_s3_oneim_to_onect(df):
s3.put_object(Body=df, Bucket=BUCKET_NAME, Key=Fraudfilekey)
write_to_s3_oneim_to_onect(df)
How can I write dictionary value directly to s3 bucket, I get Body below error raise ParamValidationError(report=report.generate_report()) botocore.exceptions.ParamValidationError: Parameter validation failed: Invalid type for parameter Body, value: A MonthSales如何将字典值直接写入 s3 存储桶,我得到 Body 下面的错误 raise ParamValidationError(report=report.generate_report()) botocore.exceptions.ParamValidationError: Parameter validation failed: Invalid type for parameter Body, value: A MonthSales
Note: I want Headers col as IM No, CT ID in csv file注意:我希望在 csv 文件中将 Headers col 作为 IM No、CT ID
There are few ways.有几种方法。 One would be to use
BytesIO
as a memory buffer for the file:一种是使用
BytesIO
作为文件的 memory 缓冲区:
import io
def write_to_s3_oneim_to_onect(df):
bytes_io = io.BytesIO()
df.to_csv(bytes_io)
s3.put_object(Body=bytes_io.getvalue(),
Bucket=BUCKET_NAME,
Key=Fraudfilekey)
Other would be to use s3fs which pandas supports.其他方法是使用pandas支持的 s3fs。 This would require you to install s3fs and setup AWS credetnails for it to use.
这将需要您安装 s3fs 并设置 AWS credetnails以供其使用。 But once setup, writing to S3 would be:
但是一旦设置,写入 S3 将是:
def write_to_s3_oneim_to_onect(df):
df.to_csv(f"s3://{BUCKET_NAME}/{Fraudfilekey}")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.