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 格式,这将允许您稍后重建数据。