val data = spark.sparkContext.parallelize(Seq((192, "abc"),(168, "def")))
val data2 = spark.sparkContext.parallelize(Seq((192, "abc")))
val result = data
.leftOuterJoin(data2)
.filter(record => record._2._2 == None)
println(result.collect.toSeq)
Output> WrappedArray((168,(def,None)))
2条答案
按热度按时间nr7wwzry1#
我正在发布一个用scala编写的解决方案。在Java中应该差不多。
执行一个
leftOuterJoin
,它将给予第一个rdd中的所有记录以及第二个rdd中的匹配记录。就像WrappedArray((168,(def,None)), (192,(abc,Some(abc))))
一样。但是为了使记录只出现在第一个rdd中,我们对None
应用了一个过滤器。w46czmvw2#
如果你使用Dataframe API - RDD是旧的,没有很多钨引擎的优化-你可以使用一个
antijoin
(它也可以存在于RDD API上,但让我们使用好的一个;- -))