Python: получение фрагмента zip-файла и обработка - PullRequest
0 голосов
/ 28 апреля 2020

Мне нужно распаковать большие zip-файлы (приблизительный размер ~ 10 ГБ) и положить их обратно на S3. У меня ограничение памяти 512 МБ.

Я попробовал этот код и получил MemoryError на line: 9, где он загружает все содержимое файла в память и, следовательно, эту ошибку памяти. Как получить кусок zip-файла, разархивировать его и загрузить обратно на S3?

import json
import boto3
import io
import zipfile

def lambda_handler(event, context):
    s3_resource = boto3.resource('s3')
    zip_obj = s3_resource.Object(bucket_name="bucket.name", key="test/big.zip")
    buffer = io.BytesIO(zip_obj.get()["Body"].read())
    z = zipfile.ZipFile(buffer)

    for filename in z.namelist():
        s3_resource.meta.client.upload_fileobj(
            z.open(filename),
            Bucket="bucket.name",
            Key=f'{"test/" + filename}'
        )

Пожалуйста, дайте мне знать

1 Ответ

0 голосов
/ 28 апреля 2020

Я бы предложил запустить экземпляр EC2 с предопределенным сценарием в UserData, равным run instance api, используя функцию Lambda, чтобы вы могли указать местоположение file_name, et c в сценарии. В этом скрипте вы можете скачать zip с S3 и разархивировать с помощью команд linux, а затем рекурсивно загрузить всю папку на S3.

Вы можете выбрать RAM / ROM в соответствии с размером вашего zip файла, опубликовать, что вы можете остановить вас экземпляр с помощью того же скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...