【问题标题】:How to join two RDDs with different lengh in Spark?如何在 Spark 中加入两个不同长度的 RDD?
【发布时间】:2020-03-07 13:07:51
【问题描述】:

我有 2 个 RDD。第一个RDD是原始RDD,第二个是我从原始RDD中过滤出来的RDD,并对其进行了一些处理。执行流程后,我想加入他们。原始 RDD 如下所示:

(1,5)
(2,60)
(3,7)
(4,1)
(5,1)
...
(10,8)

过滤和操作的RDD是:

(4,3)
(5,10)
(6,6)
(7,9)

我应该如何加入他们?当我使用 fullouterjoin 或其他连接方法时,它会出错

已编辑

我按照你说的写了这样的代码:

        original_RDD=original_RDD.fullOuterJoin(new_RDD).foreach { case (joinKey, (oldOption, newOption)) =>
        newOption match {
          case None => (joinKey,oldOption)
          case Some(newOption) => (joinKey,newOption)
        }
      }

但我收到此错误:

Error:(232, 55) type mismatch;
 found   : Unit
 required: org.apache.spark.rdd.RDD[(Long, Int)]
        nodes=nodes.fullOuterJoin(joined_new).foreach { case (joinKey, (oldOption, newOption)) =>

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    See 连接语法

    在 (K, V) 和 (K, W) 类型的数据集上调用时,返回一个数据集 (K, (V, W)) 对与每个键的所有元素对。外 通过 leftOuterJoin、rightOuterJoin 和 全外连接。

    originalRdd
      .fullOuterJoin(joinRdd)
      .foreach { case (joinKey, (oldOption, newOption)) =>
        newOption match {
          case None => println("new value is None")
          case Some(joinValue) => println(s"new value = $joinValue")
        }
      }
    

    【讨论】:

    • 我按照你说的做了,但是我出错了。我在 Edited 部分 中提到过
    • 删除“original_RDD=”。类型不匹配:original_RDD 具有 RDD[(Long, Int)] 类型,但 foreach 返回 Unit 类型。你可以使用“map”而不是“foreach”或任何你想要的
    猜你喜欢
    • 2016-01-24
    • 2016-09-07
    • 2017-06-27
    • 2018-11-24
    • 2016-11-21
    • 2020-09-06
    • 2017-07-30
    • 2019-01-01
    • 2020-10-03
    相关资源
    最近更新 更多