Как перебирать значения в мультикарте с одинаковым ключом - PullRequest
0 голосов
/ 03 мая 2020

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

(E1, "msg1")

(E1, "msg2")

(E1, "msg3")

(B1, "msg4")

Мои требования:

  1. прочитать данные из текстового файла и преобразовать их в пару значений ключа.
  2. сгруппировать данные по ключу (здесь ключ - отправитель)
  3. обработать каждую группу, например, если мы берем одну группу, то есть E1, "msg1" E1, "msg2" E1, "msg3"

  4. Итерируем все сообщения по одному и на основе расстояния Левенштейна вычисляем точность между двумя Если точность> 70, то поместите их в одну группу.

, например, G1, Msg1

G1, Msg2

G2, Msg3

вывод я хочу как (E1, Карта (G1, Список [msg1, msg2]))

Мой код такой сейчас:

  val rdd=sc.textFile(input)
 val rdd1: RDD[(String, String)] =rdd.map(line=>{
   val data=line.split(",",2)
   (data(0),data(1))
 })
val rdd2=rdd1.groupByKey()
val rdd3: RDD[(String, List[String])] =rdd2.map(k=>(k._1,k._2.toList))
rdd3.foreach(println)
val rdd4=rdd3.mapValues((line:List[String])=>{
  var mapBuffer:Map[String,List[String]]=Map()
  if(mapBuffer.isEmpty) {
    val currentline=line(0)
    mapBuffer.put()
  }
  else{

  }
}
...