Apache Beam: В чем разница между DoFn и SimpleFunction? - PullRequest
0 голосов
/ 25 мая 2018

Читая об обработке потоковых элементов в Apache Beam с использованием Java, я наткнулся на DoFn<InputT, OutputT>, а затем на SimpleFunction<InputT, OutputT>.

Оба они похожи на меня, и мне трудно понять разницу.

Может кто-нибудь объяснить разницу в терминах непрофессионала?

1 Ответ

0 голосов
/ 31 мая 2018

Концептуально можно представить, что SimpleFunction - это простой случай DoFn:

  • SimpleFunction<InputT, OutputT>:

    • простой ввод в отображение на выходеfunction;
    • один вход создает один выход;
    • статически типизированный, вы должны @Override метод apply();
    • не зависит от контекста вычисления;
    • не может использовать API состояния Beam;
    • пример использования: MapElements.via(simpleFunction) для преобразования / изменения элементов один за другим, выдача одного вывода для каждого элемента;
  • DoFn<InputT, OutputT>:

    • выполнено с ParDo;
    • в контексте (метка времени, панель окна и т. Д.);
    • может потреблять боковые входы;
    • может выдавать несколько выходов или вообще не выводить;
    • может выдавать боковые выходы;
    • может использовать API постоянного состояния Beam;
    • динамически типизированный;
    • пример варианта использования: считывание объектов из потока, фильтрация, накопление их, выполнение агрегации, преобразование их и отправка на другой выходuts;

Более подробные примеры и варианты использования для ParDos можно найти в руководстве разработчика .

В этой части упоминается MapElements, который используется для SimpleFunctions

...