我有
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]))
什么是旁路?
您只需映射rdd2
到RDD[(Option[String], Double)]
:
rdd1.leftOuterJoin(rdd2.map{case (k, v) => (Option(k), v)})
如果Context
可以使用Spark SQL类型表示,那么您可以简单地将两个RDD转换为DataFrame并加入.None
被映射到NULLs
所以一切都应该按预期工作.