2016-12-09 7 views
0

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

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

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

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

+0

Вы можете просто выполнить '.groupBy (identity)'. – marstran

+0

если я это сделаю, я получаю сообщение об ошибке «отсутствующий список аргументов для идентификатора метода в объекте Predef. Неприменимые методы только преобразуются в функции, когда ожидается тип функции. Вы можете сделать это преобразование явным, написав идентификатор _ или identity (_) вместо идентификатора. ' –

+0

Странно. Прекрасно работает для меня. Какой тип 'dataset'? В любом случае вы можете указать тип 'i', написав' (i: Int) => identity (i) ' – marstran

ответ

3

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

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

val counts = dataset.flatMap(_.intLists).groupByKey(identity).count 
+1

Спасибо. Это было слишком легко :-) Я получил работу в обоих направлениях, groupBy («value») и groupByKey (identity). –