转换中的 RDD 查找

RDD lookup inside a transformation

我有 2 个配对的 RDD,如下所示

RDD1 包含名称作为键和邮政编码作为值:

RDD1 -> RDD( (ashley, 20171), (yash, 33613), (evan, 40217) )

RDD2 包含邮政编码作为键和一些随机数作为值:

RDD2 -> RDD( (20171, 235523), (33613, 345345345), (40189, 44355217), (40122, 2345235), (40127, 232323424) )

我需要用 RDD2 中的相应值替换 RDD1 中的邮政编码。所以输出将是

RDD3 -> RDD( (ashley, 235523), (yash, 345345345), (evan, 232323424) )

我尝试使用如下所示的 RDD 查找方法进行操作,但出现异常情况,说 RDD 转换不能在另一个 RDD 转换中执行

val rdd3 = rdd1.map( x => (x._1, rdd2.lookup(x._2)(0)) )

Yon 可以简单地通过邮政编码加入 2 个 RDD:

rdd1.map({case (name, zipcode) => (zipcode, name)})
    .join(rdd2)
    .map({case (zipcode, (name, number)) => (name, number)})
    .collect()

注意,这将 return 仅记录在 rdd1 和 rdd2 中具有匹配邮政编码的记录。如果你想为 rdd1 中的记录设置一些默认编号,但在 rdd2 中没有相应的邮政编码,请使用 leftOuterJoin insted of join:

rdd1.map({case (name, zipcode) => (zipcode, name)})
    .leftOuterJoin(rdd2)
    .map({case (zipcode, (name, number)) => (name, number.getOrElse(0))})
    .collect()