Как читать файлы как byte[] в Apache Beam?

в настоящее время мы работаем над проверкой концепции Apache Beam Pipeline в облачном потоке данных. Мы помещаем некоторые файлы (без текста, в специальном двоичном формате) в Google Cloud Buckets и хотели бы прочитать эти файлы как byte[] и десериализовать их в потоке. Однако мы не можем найти источник Beam, способный читать нетекстовые файлы. Единственная идея состоит в том, чтобы расширить класс FileBasedSource, но мы считаем, что должно быть более простое решение, так как это кажется довольно простой задачей.

Спасибо, ребята, за вашу помощь.




Ответы (1)


На самом деле это полезная функция, которая в настоящее время рассматривается в запросе на включение #3717.

Отвечу вообще абы как, просто для распространения информации.

Основная цель FileBasedSource и исходных абстракций Beam в целом состоит в том, чтобы обеспечить гибкое разделение набора файлов, рассматриваемых как один огромный набор данных с одной записью в строке.

Если у вас есть только одна запись в файле, вы можете прочитать файлы в ParDo(DoFn) от имен файлов до byte[]. Вы уже получите максимальную выгоду от разделения, так как разделение между элементами поддерживается для любой коллекции PCollection.

Из-за того, как оптимизируется Dataflow, вам может понадобиться преобразование Reshuffle перед вашим `ParDo. Это гарантирует, что параллелизм чтения всех файлов отделен от параллелизма любых восходящих преобразований, внедряющих их имена в PCollection.

person Kenn Knowles    schedule 16.08.2017