当左侧键为Option []时,Spark左外连接

Yoa*_*oav 3 scala left-join apache-spark rdd

我有

val rdd1 :  RDD[(Option[String], (String, Option[Context]))]
Run Code Online (Sandbox Code Playgroud)

val rdd2 : RDD[(String,Double)]
Run Code Online (Sandbox Code Playgroud)

现在,我想,rdd1.leftOuterJoin(rdd2)但我当然不能,因为Option[String]不同于String.

连接操作的基本原理是,如果rdd1的键包含一些值,我希望有一个额外的信息.所需的输出类型为:RDD[(Options[String],((String, Option[Context]),Option[Double]))

什么是旁路?

zer*_*323 5

您只需映射rdd2RDD[(Option[String], Double)]:

rdd1.leftOuterJoin(rdd2.map{case (k, v) => (Option(k), v)})
Run Code Online (Sandbox Code Playgroud)

如果Context可以使用Spark SQL类型表示,那么您可以简单地将两个RDD转换为DataFrame并加入.None被映射到NULLs所以一切都应该按预期工作.