Я намерен выполнить некоторые операции с большим объемом памяти над очень большим CSV-файлом, хранящимся в S3, с использованием Python, чтобы переместить скрипт в AWS Lambda. Я знаю, что могу читать во всей памяти csv nto, но я определенно столкнусь с ограничениями памяти и памяти Lambda с таким большим файлом, есть ли какой-нибудь способ для потоковой передачи или просто чтения кусков csv за раз в Python, используя boto3 / botocore, в идеале, указав номера строк для чтения?
Вот некоторые вещи, которые я уже пробовал:
1) использование параметра range
в S3.get_object
для указания диапазона байтов для чтения. К сожалению, это означает, что последние строки обрезаются посередине, поскольку нет способа указать количество строк для чтения в Существуют некоторые грязные обходные пути, такие как сканирование последнего символа новой строки, запись индекса, а затем использование его в качестве начальной точки для следующего диапазона байтов, но я бы хотел, если возможно, избежать этого неуклюжего решения.
2) Использование S3 select для написания sql запросов для выборочного извлечения данных из сегментов S3. К сожалению, функция row_numbers
SQL не поддерживается, и не похоже, что есть способ чтения в подмножестве строк.