Напишите функцию Scala, чтобы найти наиболее распространенное слово между двумя файлами - PullRequest
0 голосов
/ 30 апреля 2018

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

Например: File1 = спасибо, спасибо, что вы File2 = спасибо тебе ты

Выводом будет 'you', так как оно передается 2 раза. Моя текущая функция:

def sharedWord(a:String,b:String) : String ={
val aFile = sc.textFile(a);
val bFile = sc.textFile(b);
val flattenMapa = aFile.flatMap(line => line.split(" "));
val flattenMapb = bFile.flatMap(line => line.split(" "));
val mapreduceA = flattenMapa.map(word => (word.toLowerCase, 1)).reduceByKey((key,value) => key+value);
val mapreduceB = flattenMapb.map(word => (word.toLowerCase, 1)).reduceByKey((key,value) => key+value);
//not sure how to compare the two mapreduce collections of words
//val common = most shared word.
return common
}

Я застрял в том, как правильно сравнить два значения ключа карты-уменьшения

1 Ответ

0 голосов
/ 30 апреля 2018

Это недостающий кусок.

// mapreduceA: RDD of [(thank, 3), (you, 2)]
// mapreduceB: RDD of [(thank, 1), (you, 3)]

val joinedRDD = mapreduceA.join(mapreduceB)                                 // (1)
// RDD of ((thank,(3,1)), (you,(2,3)))

val minimumWordFrequencies = joinedRDD.mapValues(x => List(x._1, x._2).min) // (2)
// RDD of ((thank,1), (you,2))

val mostFrequentWord =
    minimumWordFrequencies.reduce((a, b) => if (a._2 > b._2) a else b)      // (3)
// mostFrequentWord: (you,2)

val common = mostFrequentWord._1
  1. соединить два PairRDD по ключу (слову).
  2. применить функцию для выбора минимального количества слов частоты.
  3. выберите наиболее часто встречающееся слово.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...