Как использовать Apache Beam FileIO writeDynamic для вывода аудиофайлов из байтовых массивов? - PullRequest
0 голосов
/ 23 июня 2019

Мы используем Apache Beam для обработки потоковых данных из источника pubsub в приемник GCS с динамическими именами файлов. Мы можем писать текстовые файлы, но не файлы WAV.

Мы можем записать нашу строку байтового массива (линейное 16 wav-кодирование), работающую с StringUtf8Coder, но с ошибкой компиляции с ByteArrayEncoder

// ЭТО РАБОТАЕТ:

pipelineBeginStage
  .apply(
    FileIO.<String, KamiAppData>writeDynamic()
          .by((SerializableFunction<KamiAppData, String>) input -> input.GCSurl)
          .via(
             Contextful.fn((SerializableFunction<KamiAppData, String>) input -> input.audioStream),
             TextIO.sink())
          .to(outputBucket)
          .withNaming(url -> FileNaming.getNaming(url, "wav"))
          .withDestinationCoder(StringUtf8Coder.of())
          .withNumShards(1));

// ЭТО ВЫХОДИТ ОШИБКА СОСТАВЛЕНИЯ:

pipelineBeginStage
  .apply(
    FileIO.<String, KamiAppData>writeDynamic()
          .by((SerializableFunction<KamiAppData, String>) input -> input.GCSurl)
          .via(
            Contextful.fn((SerializableFunction<KamiAppData, byte[]>) input -> input.audioStream.getBytes()),
            TextIO.sink())
          .to(outputBucket)
          .withNaming(url -> FileNaming.getNaming(url, "wav"))
          .withDestinationCoder(ByteArrayCoder.of())
          .withNumShards(1));

Ошибка, которую мы получаем:

cannot resolve method 'via(org.apache.beam.sdk.transforms.Contextful.Fn<InputT,OutputT>>,org.apache.beam.sdk.TextIO.Sink)'

Как мы можем скомпилировать и записать аудио в файл, используя API Apache Beam?

1 Ответ

0 голосов
/ 25 июня 2019

Объяснение Антона в приведенном выше комментарии кажется мне очень ясным.

Просто хочу добавить, что для работы с байтовым типом вам может потребоваться реализовать собственный класс FileIO.Sink<byte[]>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...