Файл доступа внутри конвейера потока данных - PullRequest
0 голосов
/ 02 января 2019

Я хочу загрузить определенные файлы из временного местоположения до начала конвейера. Файлы .mmdb файлов, которые должны быть прочитаны в функции ParDo. Файлы хранятся в Google Storage, но метод, использующий файлы .mmdb, требует они должны быть объектом File (java.io).

Если я включу его в --filesToStage, они будут доступны как InputStream внутри почтового индекса. Я хочу получить к ним доступ как к файлам, а не к InputStream. Каков наилучший способ добиться этого?

В настоящее время я загружаю файлы во временную папку на рабочем месте внутри Установки ParDo.

1 Ответ

0 голосов
/ 02 января 2019

Это очень широкий вопрос высокого уровня.Ответ зависит от вашей логики, которая использует файлы.File представляет файл в файловой системе , поэтому, если у вас есть компонент, который требует, чтобы входные данные были экземпляром File, то было бы правильно записать его во временную папку локально.Луч не обеспечивает лучшую абстракцию для этого случая.

Однако я рекомендовал бы изучить обновление логики, которая в настоящее время обрабатывает Files, чтобы принимать и другие виды ввода.Вы, вероятно, столкнулись с проблемой, вызванной отсутствием разделения проблем и жесткой связью.То есть у вас есть компонент, который принимает File, открывает его, обрабатывает ошибки при открытии, читает, анализирует данные, может даже проверяет и обрабатывает данные.Все это - отдельные проблемы, и, вероятно, их следует обрабатывать отдельными компонентами, которые можно объединять и заменять вместе, когда это необходимо, например:

  • класс, который знает, как обращаться с файловой системой и поворачивать путьв байтовый поток;
  • аналогичный класс, который знает, как справиться с получением файла через http (например, сценарий использования GCS) и превратить его в байтовый поток;
  • компонент, который знает, какразбирать поток байтов в данные;
  • компонент, который обрабатывает проанализированные данные;
  • другие вещи, вероятно, могут жить где угодно;

Таким образом, вы можете легко реализовать любойдругие источники для вашего компонента, составьте и протестируйте их независимо.

Например, вы можете реализовать свою логику в виде двух соединенных PCollections, один из которых будет считывать данные непосредственно из местоположения GCS, анализировать строки текста ии обработать его в действующей бизнес-логике, прежде чем объединить его с другим PCollection.

...