当一个 Option 类型作为键时加入 2 个 RDD

Pri*_*ala 2 scala apache-spark rdd

我有 2 个我想加入的 RDD,看起来像这样

val a:RDD[(Option[Int],V)]
val q:RDD[(Int,V)]
Run Code Online (Sandbox Code Playgroud)

有什么办法可以对它们进行左外连接?我试过这个,但它不起作用,因为键的类型不同,即Int, Option[Int]

 q.leftOuterJoin(a)
Run Code Online (Sandbox Code Playgroud)

小智 5

自然的解决方案是将 Int 转换为 Option[Int] 以便它们具有相同的类型。

跟随你的例子:

val a:RDD[(Option[Int],V)]
val q:RDD[(Int,V)]


q.map{ case (k,v) => (Some(k),v))}.leftOuterJoin(a)
Run Code Online (Sandbox Code Playgroud)

如果你想在输出中恢复 Int 类型,你可以这样做:

q.map{ case (k,v) => (Some(k),v))}.leftOuterJoin(a).map{ case (k,v) => (k.get, v) }
Run Code Online (Sandbox Code Playgroud)

请注意,您可以毫无问题地执行“.get”,因为不可能在那里获得 None 。