Amazon S3 中参数 Body 的类型无效
Invalid type for parameter Body in Amazon S3
我正在尝试使用 Glue 将 python 列表 data_issues
(<class 'list'>
类型)保存到 Amazon S3 存储桶,但出现以下错误:
Parameter validation failed:
Invalid type for parameter Body, value:
[('document_entity_sdi', Exception("For column, int and YES don't match.")),
('account_status_sdi', Py4JJavaError('An error occurred while calling o80.getCatalogSink.\n', JavaObject id=o654)),
('account_transaction_fcs_status', Py4JJavaError('An error occurred while calling o80.getCatalogSink.\n', JavaObject id=o797)),
('purchase_order_agreement', Py4JJavaError('An error occurred while calling o80.getCatalogSink.\n', JavaObject id=o21565))],
type: <class 'list'>, valid types: <class 'bytes'>, <class 'bytearray'>, file-like object
我试过这个解决方法来转换列表 bytes(data_issues)
但没有用:
BUCKET = 'bucket_name'
s3 = boto3.client('s3')
keyid = 'keyID'
print("Uploading S3 object with SSE-KMS")
s3.put_object(Bucket=BUCKET,
Key='encrypt-key',
Body=bytes(data_issues),
ServerSideEncryption='aws:kms',
SSEKMSKeyId=keyid)
print("Saving to S3, Done")
您的 data_issues
似乎是一个字符串列表。您可以通过多种方式将其转换为字节。一种是先制作 json,然后将其变成 bytes
:
Body=bytes(json.dumps(data_issues).encode())
更新:
如果你有非字符串值,你可以这样做:
Body=bytes(json.dumps(data_issues, default=str).encode())
根据您想做什么,您也可以 pickle
您的有效载荷。如果数据不适合 json 格式,这将允许您稍后重建数据。
我正在尝试使用 Glue 将 python 列表 data_issues
(<class 'list'>
类型)保存到 Amazon S3 存储桶,但出现以下错误:
Parameter validation failed:
Invalid type for parameter Body, value:
[('document_entity_sdi', Exception("For column, int and YES don't match.")),
('account_status_sdi', Py4JJavaError('An error occurred while calling o80.getCatalogSink.\n', JavaObject id=o654)),
('account_transaction_fcs_status', Py4JJavaError('An error occurred while calling o80.getCatalogSink.\n', JavaObject id=o797)),
('purchase_order_agreement', Py4JJavaError('An error occurred while calling o80.getCatalogSink.\n', JavaObject id=o21565))],
type: <class 'list'>, valid types: <class 'bytes'>, <class 'bytearray'>, file-like object
我试过这个解决方法来转换列表 bytes(data_issues)
但没有用:
BUCKET = 'bucket_name'
s3 = boto3.client('s3')
keyid = 'keyID'
print("Uploading S3 object with SSE-KMS")
s3.put_object(Bucket=BUCKET,
Key='encrypt-key',
Body=bytes(data_issues),
ServerSideEncryption='aws:kms',
SSEKMSKeyId=keyid)
print("Saving to S3, Done")
您的 data_issues
似乎是一个字符串列表。您可以通过多种方式将其转换为字节。一种是先制作 json,然后将其变成 bytes
:
Body=bytes(json.dumps(data_issues).encode())
更新:
如果你有非字符串值,你可以这样做:
Body=bytes(json.dumps(data_issues, default=str).encode())
根据您想做什么,您也可以 pickle
您的有效载荷。如果数据不适合 json 格式,这将允许您稍后重建数据。