Как открыть поток, а не загружать весь файл в память внутри Pyhton Lambda - PullRequest
1 голос
/ 30 апреля 2019

Привет, я новичок в лямбде и питоне. У меня есть сценарий использования, чтобы прочитать содержимое большого файла, скажем, более 1 ГБ, и просто записать его содержимое построчно.

Я сделал лямбда-функцию, как показано ниже:

import boto3

def lambda_handler(event, context):
    """Read file from s3 on trigger."""
    s3 = boto3.resource('s3')
    file_obj = event['Records'][0]

    bucketname = str(file_obj['s3']['bucket']['name'])
    filename = str(file_obj['s3']['object']['key'])

    iterator = s3.Object(bucketname, filename).get()['Body'].iter_lines()
    for line in iterator:
        print(line)

    return 'Lambda executed successfully.'

Но внутри журналов ничего не печатается.

Я думаю, s3.Object(bucketname, filename).get()['Body'] пытается загрузить весь файл в память. Это мое понимание верно? потому что это нормально работает для маленьких файлов.

Если да, то как мне открыть файл в виде потока, не загружая его полностью в память.

1 Ответ

0 голосов
/ 30 апреля 2019

Это работа для меня

s3 = boto3.resource('s3')
obj = s3.Object(BUCKET, key)
for line in obj.get()['Body']._raw_stream:
    # do something with line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...