我有
val rdd1 : RDD[(Option[String], (String, Option[Context]))]
和
val rdd2 : RDD[(String,Double)]
现在,我想rdd1.leftOuterJoin(rdd2)
,但我当然不能因为Option[String]
与String
不同。
连接操作的基本原理是,如果rdd1的键包含一些值,我想有一个额外的信息。所需的输出类型为:RDD[(Options[String],((String, Option[Context]),Option[Double]))
旁路是什么?
答案 0 :(得分:5)
您只需将rdd2
映射到RDD[(Option[String], Double)]
:
rdd1.leftOuterJoin(rdd2.map{case (k, v) => (Option(k), v)})
如果可以使用Spark SQL类型表示Context
,那么您只需将两个RDD转换为DataFrame并加入即可。 None
映射到NULLs
,因此一切都应该按预期工作。