我有2个配对的RDD,如下所示
RDD1包含名称作为键,zipcode包含值:
RDD1 - > RDD((ashley,20171),(yash,33613),(evan,40217))
RDD2包含密码和一些随机数作为值:
RDD2 - > RDD((20171,23553),(33613,345345345),(40189,44355217), (40122,2345235),(40127,232323424))
我需要用RDD2中的相应值替换RDD1中的zipcodes。所以输出将是
RDD3 - > RDD((ashley,235523),(yash,345345345),(evan,232323424))
我尝试使用如下所示的RDD查找方法,但我得到例外,说RDD转换无法在另一个RDD转换中执行
val rdd3 = rdd1.map( x => (x._1, rdd2.lookup(x._2)(0)) )
答案 0 :(得分:6)
Yon可以通过zipcode简单地加入2个RDD:
rdd1.map({case (name, zipcode) => (zipcode, name)})
.join(rdd2)
.map({case (zipcode, (name, number)) => (name, number)})
.collect()
注意,这将只返回在rdd1和rdd2中具有匹配的zipcodes的记录。如果要为rdd1中的记录设置一些默认编号,即rdd2中没有相应的邮政编码,请使用 leftOuterJoin join :
rdd1.map({case (name, zipcode) => (zipcode, name)})
.leftOuterJoin(rdd2)
.map({case (zipcode, (name, number)) => (name, number.getOrElse(0))})
.collect()