Найдите слово, имеющее максимальное количество, используя топологию Trident

Как я могу найти слово, которое имеет максимальное количество слов в топологии подсчета слов, используя топологию Trident? Вот ссылка на топологию подсчета слов Trident. https://github.com/nathanmarz/storm-starter/blob/master/src/jvm/storm/starter/trident/TridentWordCount.java


person Rahul Singh    schedule 03.01.2019    source источник


Ответы (1)


Trident API предоставляет операции max и maxBy, которые возвращают максимальное значение для каждого раздела пакета кортежей в потоке трезубца.

Итак, после подсчета количества каждого слова, как показано ниже:

Stream wordCountsStream = topology.newStream("spout1", spout).parallelismHint(16).each(new Fields("sentence"),
        new Split(), new Fields("word")).groupBy(new Fields("word")).persistentAggregate(new MemoryMapState.Factory(),
        new Count(), new Fields("count")).parallelismHint(16).newValuesStream();

Используйте maxBy, чтобы получить максимальное количество слов:

 wordCountsStream.maxBy(new Fields("count"))
person DP63    schedule 04.03.2019