Похоже, вы пытаетесь использовать метод Spark для коллекции Scala. Эти два API имеют некоторое сходство, но reduceByKey
не является его частью.
В чистом виде Scala вы можете сделать это так:
val counts =
ransomNote.foldLeft(Map.empty[Char, Int].withDefaultValue(0)) {
(counts, c) => counts.updated(c, counts(c) + 1)
}
foldLeft
перебирает коллекция слева, используя пустую карту счетчиков в качестве накопленного состояния (которое возвращает 0, если значение не найдено), которая обновляется в функции, переданной в качестве аргумента, путем обновления найденного значения с увеличением.
Обратите внимание, что прямой доступ к карте (counts(c)
) может быть небезопасным в большинстве ситуаций (поскольку он вызовет исключение, если элемент не найден). В этой ситуации это нормально, потому что в этой области я знаю, что использую карту со значением по умолчанию. При доступе к карте вы чаще всего захотите использовать get
, который возвращает Option
. Подробнее об этом в официальной документации Scala ( здесь для версии 2.13.2).
Вы можете поиграть с этим кодом здесь, на Scast ie .