我正在嘗試將資料幀上傳到 S3。資料框是通過獲取多個資料源并將它們連接在一起以及執行一些轉換來創建的。這些操作完全在記憶體中完成。我還需要將資料存盤到s3每行json記錄的位置,如下所示:
{"key_1": "value_11", "key_2": "value_12", ...}
{"key_1": "value_21", "key_2": "value_22", ...}
...
在桌子變大之前,我一直在使用put_object()并且沒有問題。
代碼片段
...
json_buffer = StringIO()
df_copy.to_json(json_buffer, orient="records", lines=True)
json_buffer.seek(0)
# self.__s3.put_object(
# Bucket=bucket,
# Body=json_buffer.getvalue(),
# Key=key_json)
GB = 1024 ** 3
# Ensure that multipart uploads only happen if the size of a transfer
# is larger than S3's size limit for nonmultipart uploads, which is 5 GB.
upl_config = TransferConfig(multipart_threshold=5*GB)
self.__s3.upload_fileobj(
json_buffer,
Bucket=bucket,
Key=key_json,
Config=upl_config)
使用上面的代碼,我得到以下錯誤:
TypeError: Unicode-objects must be encoded before hashing
我嘗試了以下方法:
raise ValueError('Fileobj 必須實作讀取')
將物件之類的檔案保存到 s3 時出現錯誤:Unicode 物件必須在散列之前進行編碼
問題:
無論如何將資料保存為json記錄而不是csv像其他問題一樣?
uj5u.com熱心網友回復:
看起來你需要傳入一個位元組緩沖區而不是 str。嘗試使用 BytesIO 而不是 StringIO。
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.upload_fileobj
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/454783.html
標籤:Python python-3.x 亚马逊-s3 博托3
上一篇:如何挑選合并提交?
下一篇:列出S3物件直到第一級
