我正在尝试在 Spark 中执行连接,因为我知道左侧的一个键在另一个 RDD 中没有对应的值。
文档说如果没有找到密钥,它应该使用 None 作为选项执行连接,但我不断收到类型不匹配错误。
这里有什么见解吗?
我正在尝试在 Spark 中执行连接,因为我知道左侧的一个键在另一个 RDD 中没有对应的值。
文档说如果没有找到密钥,它应该使用 None 作为选项执行连接,但我不断收到类型不匹配错误。
这里有什么见解吗?
取这两个 RDD:
val rdd1 = sc.parallelize(Array(("test","foo"),("test2", "foo2")))
val rdd2 = sc.parallelize(Array(("test","foo3"),("test3", "foo4")))
当你加入他们时,你有几个选择。你做什么取决于你想要什么。你想要一个只有公共键的RDD吗?
val leftJoined = rdd1.join(rdd2)
leftJoined.collect
res1: Array[(String, (String, String))] = Array((test,(foo,foo3)))
如果您想rdd2
用 填充缺少的键None
,请使用leftOuterJoin
:
val leftOuter = rdd.leftOuterJoin(rdd2)
leftOuter.collect
res2: Array[(String, (String, Option[String]))] = Array((test2,(foo2,None)), (test,(foo,Some(foo3))))
如果您希望任一侧缺少的键用 填充None
,请使用fullOuterJoin
:
val fullOuter = rdd1.fullOuterJoin(rdd2)
fullOuter.collect
res3: Array[(String, (Option[String], Option[String]))] = Array((test2,(Some(foo2),None)), (test3,(None,Some(foo4))), (test,(Some(foo),Some(fo3))))