2013-10-07 3 views
0

Я работаю над побочным проектом, в котором мы хотим обрабатывать изображения в программе создания карты памяти (для возможного развертывания на эластичной карте Amazon mapreduce). Ввод в процесс будет списком всех файлов, каждый из которых содержит немного дополнительных данных (лат/длинное положение нижнего левого угла - это аэрофотоснимки).Hadoop: обрабатывать файлы изображений в коде Python

Фактическая обработка должна проходить в Python, чтобы мы могли использовать библиотеку изображений Python. Все примеры потоковой передачи Python, которые я могу найти, можно использовать для ввода текста stdin и процесса. Могу ли я отправлять данные изображения на Python через stdin? Если да, то как?

Я написал класс Mapper в Java, который принимает список файлов и сохраняет имена, дополнительные данные и двоичное содержимое в файл последовательности. Я думал, может быть, мне нужно написать собственный Java-конвертер, который принимает файл последовательности и передает его на Python. Это правильный подход? Если да, то какова должна быть Java для вывода изображений и Python для их просмотра?

В случае, если это не очевидно, я не очень знакомы с Java ИЛИ Python, так что возможно я просто откусить намного больше, чем я могу жевать это как мое введение в обоих языках ...

ответ

0

Есть несколько возможных подходов, которые я могу видеть:

  1. Используйте как дополнительные данные и содержимое файла в качестве входных данных для вашего питона программы. Трудная часть здесь будет кодировкой. Я откровенно не знаю, как потоковая передача работает с сырым двоичным содержимым, и я предполагаю, что основной ответ «не очень хорошо». Основная проблема заключается в том, что связь stdin/stdout между процессами очень текстовая, опираясь на разграничение ввода с вкладками и новыми линиями и тому подобное. Вам нужно будет беспокоиться о кодировании данных изображения и, вероятно, иметь какой-то шаг предварительной обработки или пользовательский InputFormat, чтобы вы могли представлять изображение в виде текста.
  2. Используйте только дополнительные данные и местоположение файла в качестве входа в программу python. Затем программа может самостоятельно считывать фактические данные изображения из файла. Икота здесь гарантирует, что файл доступен для скрипта python. Помните, что это распределенная среда, поэтому файлы должны быть в HDFS или где-то подобном, и я не знаю, есть ли хорошие библиотеки для чтения файлов из HDFS в python.
  3. Взаимодействие с java-python. Напишите java mapper, который использует класс Runtime, чтобы запустить сам процесс python. Таким образом, вы получаете полный контроль над тем, как эти два мира взаимодействуют, но, очевидно, его больше кода и немного более активное участие.
Смежные вопросы