如何交集两个 MapReduce 结果
How intersection two MapReduce result
我需要在两个文件中找到相同的词。我使用 spark,java。
任务:
对于两个文本文件,计算第一个文件和第二个文件中同时出现的单词数。结果以键值对的形式保存到文件中,其中键是常用词的数量,值是词本身。
问题:
如何正确地做到这一点?
我首先使用 wordcount 在第一个文件中找到单词和该单词出现的次数,这与第二个文件类似。
如何组合它们只留下第一个和第二个之间的共同点?
我加入了他们,我得到了这个:
(测试,(1,1))
(火花,(1,2))
我需要至少获得两个值,即
(测试,1)
(火花,1)
如何正确操作?
My edit code
如果您在两个数据帧 df1
和 df2
中有 (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"))
我需要在两个文件中找到相同的词。我使用 spark,java。
任务: 对于两个文本文件,计算第一个文件和第二个文件中同时出现的单词数。结果以键值对的形式保存到文件中,其中键是常用词的数量,值是词本身。
问题: 如何正确地做到这一点? 我首先使用 wordcount 在第一个文件中找到单词和该单词出现的次数,这与第二个文件类似。 如何组合它们只留下第一个和第二个之间的共同点?
我加入了他们,我得到了这个: (测试,(1,1)) (火花,(1,2))
我需要至少获得两个值,即 (测试,1) (火花,1)
如何正确操作?
My edit code
如果您在两个数据帧 df1
和 df2
中有 (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"))