如何交集两个 MapReduce 结果

How intersection two MapReduce result

我需要在两个文件中找到相同的词。我使用 spark,java。

任务: 对于两个文本文件,计算第一个文件和第二个文件中同时出现的单词数。结果以键值对的形式保存到文件中,其中键是常用词的数量,值是词本身。

问题: 如何正确地做到这一点? 我首先使用 wordcount 在第一个文件中找到单词和该单词出现的次数,这与第二个文件类似。 如何组合它们只留下第一个和第二个之间的共同点?

我加入了他们,我得到了这个: (测试,(1,1)) (火花,(1,2))

我需要至少获得两个值,即 (测试,1) (火花,1)

如何正确操作?

My edit code

如果您在两个数据帧 df1df2 中有 (word,count),您可以使用内部连接。在 spark 中,默认情况下连接是内部等值连接,例如

df1.join(df2, Seq("word"))

可以解决问题(这取决于您如何从 df1 和 df2 命名 word/count,您可能需要重命名某些列)。

这是 scala,但应该足够简单,可以转换为 java:

val f1 = spark.sparkContext.textFile("file1")
val w1 = f1.flatMap(_.split(" ")).toDF().distinct()
val f2 = spark.sparkContext.textFile("file2")
val w2 = f2.flatMap(_.split(" ")).toDF().distinct()
val result = w1.join(w2,w1("value")===w2("value"))