Spark Shell - как узнать, появлялось ли максимальное количество раз в файле - PullRequest
0 голосов
/ 15 сентября 2018

Найти userID пользователя / ов, которые / дали максимальную обратную связь с фильмами из текстового файла, используя Spark Shell

1:123
1:212
1:111
1:212
2:212
2:125
3:88

, поэтому я хочу отобразить идентификатор использования 1, который дал максимальную обратную связь как я могу узнать, появился ли ID 1 максимальное количество раз в файле?

scala>  val feedback = sc.textFile("/ratings.dat")     
scala>  val a = feedback.map(row => row.split("::")(0)).count     
a: Long = 1000209

1 Ответ

0 голосов
/ 15 сентября 2018

приветствуется.Обычно, задавая вопросы, лучше рассказать немного подробнее о вашей проблеме ... включить сигнатуры типов ... какие поля находятся в ваших данных (я могу сделать вывод, что это разделитель ':', а первое поле - 'user'id ', но лучше, если вы откровенны).

Последняя вещь ... где вы уже искали ... что вы пробовали ... с какими проблемами вы сталкиваетесь?Никто здесь не научит вас зажигать, но многие люди помогут вам преодолеть препятствия.

Я бы сделал это примерно так, если мои предположения верны ... также обратите внимание, яиспользуйте RDD, а не фреймы данных, поэтому, если вам нужен определенный формат, снова ... лучше всего указать в вопросе.

val ids_w_counts: RDD[(String, Int)] = {
  feedback
    .rdd                                    // convert to RDD
    .map(row => (row.split(":").head, 1))   // extract to (user_id, 1)
    .reduceByKey(_ + _)                     // now you have (user_id, total entries)
  }

// max number of entries by one user_id
val max_id_cnt: Int = ids_w_cnts.map(_._2).max

// filter all users to just those with max entries
val top_users = ids_w_counts.filter(_._2 == max_id_cnt).collect

// print in shell; again specify format if you need it differently
top_users.foreach(println)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...