Запись в AWS S3 с использованием библиотеки Python s3fs завершается неудачно с EntityTooLarge - PullRequest
0 голосов
/ 30 ноября 2018

Я знаю, что в API AWS S3 есть ограничение на загрузку файлов размером более 5 ГБ.В boto3 я должен использовать multipart

Я пытаюсь настроить объект S3File в s3fs, чтобы сделать то же самое, но я не могу понять это.

Я использую (в качестве примера ошибки) очень простой код:

import s3fs

s3 = s3fs.S3FileSystem()

with s3.open("s3://bucket/huge_file.csv", "w") as s3_obj:
   with open("huge_file.csv") as local_file
       s3_obj.write(local_file.read())

Где huge_file.csv имеет размер> 5Gb.

Я получаю ошибку

...
botocore.exceptions.ClientError: An error occurred (EntityTooLarge) when calling  the PutObject operation: Your proposed upload exceeds the maximum allowed size

...

File ... /s3fs/core.py" line 1487, in __exit__

self.close()

File ... /s3fs/core.py" line 1454, in close

Итак, вопрос в том, как (если это возможно) настроить s3fs для загрузки файлов размером больше 5Gb (как громкоКак настроить его для многоэтапной загрузки?

1 Ответ

0 голосов
/ 30 ноября 2018

Я думаю, что эта тема Github должна решить все ваши проблемы, и чтобы облегчить вашу жизнь, я думаю, это то, что вы ищете.

import boto3
from boto3.s3.transfer import TransferConfig

# Get the service client
s3 = boto3.client('s3')

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.
config = TransferConfig(multipart_threshold=5 * GB)

# Upload tmp.txt to bucket-name at key-name
s3.upload_file("tmp.txt", "bucket-name", "key-name", Config=config)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...