Scala 两个键值对RDD的火花和值

Scala 两个键值对RDD的火花和值,scala,apache-spark,key-value,Scala,Apache Spark,Key Value,我有两个文件A和B,其内容如下: A B 我想分别计算每个文件中每个单词的出现次数,然后将结果相加,以获得两个文件中所有单词的计数。也就是说,如果一个单词出现在两个文件中,那么它的最终计数将是两个文件中其计数的总和 以下是我迄今为止编写的代码: val readme = sc.textFile("A.txt") val readmesplit = readme.flatMap(line => line.split(" ")) val changes = sc.textFile("B.txt

我有两个文件AB,其内容如下:

A

B

我想分别计算每个文件中每个单词的出现次数,然后将结果相加,以获得两个文件中所有单词的计数。也就是说,如果一个单词出现在两个文件中,那么它的最终计数将是两个文件中其计数的总和

以下是我迄今为止编写的代码:

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
现在,我如何对每个键的值元组求和,以获得两个文件中每个单词的出现率

val totals = ans.map {
  case (word, (one, two)) => (word, one.getOrElse(0) + two.getOrElse(0))
}
只需提取这两个值,如果单词不存在,则返回0,然后添加结果

只需提取这两个值,如果单词不存在,则返回0,然后添加结果

只需提取这两个值,如果单词不存在,则返回0,然后添加结果


只需提取这两个值,如果单词不存在,则返回0,然后添加结果。

您是否尝试使用
union
而不是
fullOuterJoin

val ans = readmesplit.union(changessplit).map(x => (x,1)).reduceByKey((x, y) => x + y)

您是否尝试过使用
union
而不是
fullOuterJoin

val ans = readmesplit.union(changessplit).map(x => (x,1)).reduceByKey((x, y) => x + y)

您是否尝试过使用
union
而不是
fullOuterJoin

val ans = readmesplit.union(changessplit).map(x => (x,1)).reduceByKey((x, y) => x + y)

您是否尝试过使用
union
而不是
fullOuterJoin

val ans = readmesplit.union(changessplit).map(x => (x,1)).reduceByKey((x, y) => x + y)

我必须承认,这是一个比我想要的更优雅的解决方案。如果这是一个更好的解决方案,请不要接受我的答案。你解决了我面临的问题,这使你的答案正确,不管是谁,@ccheneson的回答只是我一直打算做的更好的方式。我必须承认,这是一个比我想要的更优雅的解决方案。如果这是一个更好的解决方案,请不要接受我的回答。你解决了我面临的问题,这使你的回答成为我问题的正确答案,不管是谁,@ccheneson的回答只是我一直打算做的更好的方式。我必须承认,这是一个比我想要的更优雅的解决方案。如果这是一个更好的解决方案,请不要接受我的回答。你解决了我面临的问题,这使你的回答成为我问题的正确答案,不管是谁,@ccheneson的回答只是我一直打算做的更好的方式。我必须承认,这是一个比我想要的更优雅的解决方案。如果这是一个更好的解决方案,请不要接受我的回答。你解决了我面临的问题,这使你的回答成为我问题的正确答案,不管是谁,@ccheneson的回答只是我一直打算做的更好的方式。