у меня есть два файла и B, содержание которого являются следующим:Spark - Sum значение РДА пар два значения ключа
brown i like
big is house
jumps over lazy
B
this is my house
my house is brown
brown is color
Я хочу, чтобы каждый раз записывать каждое слово в каждом файле, а затем суммировать результаты так, чтобы получить количество всех слов в два файла, если в обоих файлах есть слово, тогда его окончательный счет будет состоять из нескольких сумм в обоих файлах.
Ниже приводится код, который я написал до сих пор:
val readme = sc.textFile("A.txt")
val readmesplit = readme.flatMap(line => line.split(" "))
val changes = sc.textFile("B.txt")
val changessplit = changes.flatMap(line => line.split(" "))
val readmeKV = readmesplit.map(x => (x, 1)).reduceByKey((x, y) => x + y)
val changesKV = changessplit.map(x => (x,1)).reduceByKey((x, y) => x + y)
val ans = readmeKV.fullOuterJoin(changesKV).collect()
Этот код дает мне следующий вывод:
(this,(Some(1),None)), (is,(Some(3),Some(1))), (big,(None,Some(1))),
(lazy,(None,Some(1))), (house,(Some(2),Some(1))), (over,(None,Some(1)))...and so on
Теперь, как я просуммировать значения кортежа каждого ключа для получения заполнение каждого слова в обоих файлах.
Должен признаться, это намного более элегантное решение, чем то, что я собирался сделать. –
Не стесняйтесь отвечать на мой вопрос, если это лучшее решение. –
Вы столкнулись с проблемой, с которой я столкнулся, что делает ваш правильный ответ на мой вопрос, кто бы ни ответил @ ccheneson, это был лучший способ сделать то, что я решил сделать все это время. –