Я изучаю Map-Reduce с помощью Flink и задаюсь вопросом, как эффективно подсчитывать элементы в DataSet. То, что я до сих пор это:Flink: DataSet.count() является узким местом - как считать параллель?
DataSet<MyClass> ds = ...;
long num = ds.count();
При выполнении этого, в моем Флинка войти он говорит
12/03/2016 19:47:27 DataSink (кол-()) (1/1) переключился на RUNNING
Таким образом, используется только один процессор (у меня есть четыре и другие команды, такие как уменьшение использования всех них).
Я думаю, что count() внутренне собирает DataSet со всех четырех процессоров и подсчитывает их последовательно, вместо того, чтобы каждый процессор подсчитывал свою часть, а затем суммировал ее. Это правда?
Если да, то как я могу использовать преимущества всех моих процессоров? Было бы неплохо сначала сопоставить мой DataSet с 2-кортежем, который содержит исходное значение как первый элемент, а длинное значение 1 - как второй элемент, а затем агрегировать его с помощью функции SUM?
Например, DataSet будет отображаться в DataSet>, где Long всегда будет равным 1. Поэтому, когда я суммирую все элементы, сумма второго значения кортежа будет правильным значением счетчика.
Какова наилучшая практика для подсчета элементов в DataSet?
Привет Саймон
Спасибо за ваш ответ. К сожалению, я не знаю, как я могу сделать подсчет. Это флинковая операция? Я не смог найти информацию об этом –
Я нашел решение. Вы имели в виду это? \t \t \t набор данных> х = hasNum.map (новый MapFunction <МойКласс, Tuple1 >() { \t \t \t \t @Override \t \t \t \t общественных Tuple1 карту (МойКласс т) бросает исключение { \t \t \t \t \t возвращение новый Tuple1 (1L); \t \t \t \t} \t \t \t \t \t \t \t}). ГруппаBy (0).сумма (0); –
Почти;) Я прокомментирую ваш собственный ответ –