группа плоской карты набора данныхПо отсутствующему типу параметра

У меня есть набор данных со столбцом, который содержит список чисел.

Я хочу подсчитать количество вхождений каждого числа во всех этих списках. Итак, я делаю flatMap, чтобы получить набор всех целых чисел. Я хочу сгруппировать его, чтобы у меня было каждое число только один раз, а затем добавить количество вхождений (во втором столбце или что-то в этом роде). Мой код до сих пор:

val counts = dataset.flatMap(_.intLists).groupBy(i => identity(i)).count

Но он всегда говорит, что в «i» отсутствует тип параметра. Думаю, мне нужно сказать, что это Int, но как мне это сделать? Или я что-то совсем другое упускаю?


person Simon He    schedule 09.12.2016    source источник
comment
Вы можете просто сделать .groupBy(identity).   -  person marstran    schedule 09.12.2016
comment
если я это сделаю, я получаю сообщение об ошибке «отсутствует список аргументов для идентификатора метода в объекте Predef». Непримененные методы преобразуются в функции только тогда, когда ожидается тип функции. Вы можете сделать это преобразование явным, написав идентификатор _ или идентификатор (_) вместо идентификатора.'   -  person Simon He    schedule 09.12.2016
comment
Странный. У меня работает нормально. Какой тип dataset? В любом случае, вы можете указать тип i, написав (i: Int) => identity(i)   -  person marstran    schedule 09.12.2016


Ответы (1)


Тестируя ваш код с зависимостью Spark 2.0.2 в пути к классам, я вижу, что метод groupBy ожидает либо String, либо Column.

Вы можете использовать метод groupByKey, который принимает функцию для извлечения ключа группировки (в вашем примере identity).

val counts = dataset.flatMap(_.intLists).groupByKey(identity).count
person stefanobaghino    schedule 09.12.2016
comment
Спасибо. Это было почти слишком просто :-) У меня это работало в обоих направлениях, groupBy(value) и groupByKey(identity). - person Simon He; 09.12.2016