Вот моя проблема: у меня есть файл в HDFS, который потенциально может быть огромным (= недостаточно, чтобы соответствовать всем в памяти)
Мне бы хотелось сделать это, чтобы не кэшировать этот файл в памяти и обрабатывать его только по строке, как если бы я делал это с обычным файлом:
for line in open("myfile", "r"):
# do some processing
Я смотрю, есть ли простой способ сделать это правильно без использования внешних библиотек. Возможно, я смогу работать с libpyhdfs или python-hdfs, но я хотел бы, если возможно, избегать введения новых новых зависимостей и непроверенных библиотек в системе, тем более, что обе эти функции, по-видимому, не поддерживаются и не указывают, что их нельзя использовать в производстве.
Я думал сделать это, используя стандартные инструменты командной строки "hadoop", используя модуль Python subprocess
, но я не могу быть в состоянии делать то, что мне нужно, поскольку нет инструментов командной строки, которые могли бы сделать моя обработка, и я хотел бы выполнить функцию Python для каждой строки в потоковом режиме.
Есть ли способ применить функции Python в качестве правильных операндов труб, используя модуль подпроцесса? Или даже лучше, откройте его как файл в качестве генератора, чтобы я мог легко обрабатывать каждую строку?
cat = subprocess.Popen(["hadoop", "fs", "-cat", "/path/to/myfile"], stdout=subprocess.PIPE)
Если есть другой способ добиться того, что я описал выше, не используя внешнюю библиотеку, я также довольно открыт.
Спасибо за любую помощь!