Это очень широкий вопрос высокого уровня.Ответ зависит от вашей логики, которая использует файлы.File
представляет файл в файловой системе , поэтому, если у вас есть компонент, который требует, чтобы входные данные были экземпляром File
, то было бы правильно записать его во временную папку локально.Луч не обеспечивает лучшую абстракцию для этого случая.
Однако я рекомендовал бы изучить обновление логики, которая в настоящее время обрабатывает Files
, чтобы принимать и другие виды ввода.Вы, вероятно, столкнулись с проблемой, вызванной отсутствием разделения проблем и жесткой связью.То есть у вас есть компонент, который принимает File
, открывает его, обрабатывает ошибки при открытии, читает, анализирует данные, может даже проверяет и обрабатывает данные.Все это - отдельные проблемы, и, вероятно, их следует обрабатывать отдельными компонентами, которые можно объединять и заменять вместе, когда это необходимо, например:
- класс, который знает, как обращаться с файловой системой и поворачивать путьв байтовый поток;
- аналогичный класс, который знает, как справиться с получением файла через http (например, сценарий использования GCS) и превратить его в байтовый поток;
- компонент, который знает, какразбирать поток байтов в данные;
- компонент, который обрабатывает проанализированные данные;
- другие вещи, вероятно, могут жить где угодно;
Таким образом, вы можете легко реализовать любойдругие источники для вашего компонента, составьте и протестируйте их независимо.
Например, вы можете реализовать свою логику в виде двух соединенных PCollections
, один из которых будет считывать данные непосредственно из местоположения GCS, анализировать строки текста ии обработать его в действующей бизнес-логике, прежде чем объединить его с другим PCollection
.