【问题标题】:How intersection two MapReduce result两个 MapReduce 的结果如何相交
【发布时间】:2019-05-05 04:50:18
【问题描述】:

我需要在两个文件中找到相同的单词。我使用火花,Java。

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

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

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

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

如何正确操作?

My edit code

【问题讨论】:

    标签: java apache-spark mapreduce


    【解决方案1】:

    这是 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"))
    

    【讨论】:

      【解决方案2】:

      如果您在两个数据帧 df1df2 中有 (word,count),则可以使用内连接。默认情况下,火花连接是内部等连接,类似于

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

      可以解决问题(这取决于您如何命名 df1 和 df2 中的单词/计数,您可能需要重命名某些列)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-17
        • 1970-01-01
        • 1970-01-01
        • 2020-06-30
        • 2017-08-03
        • 2021-07-30
        • 1970-01-01
        相关资源
        最近更新 更多