我有两个不同的RDD,每个RDD都有一些公共字段,基于这些字段我希望从RDD1或RDD2获得不匹配的记录。[RDD1中可用的记录但在RDD2中不可用] [RDD2中可用的记录但不可用在RDD1]
我们似乎可以使用subtract
或subtractbyKey
。
示例输入:
**File 1:**
sam,23,cricket
alex,34,football
ann,21,football
**File 2:**
ruby,25,football,usa
alex,34,cricket,usa
ann,21,cricket,usa
**expected output:**
sam,23,cricket
更新
目前我正在使用Spark SQL从RDD获取不匹配的记录(编写查询以获取不匹配的记录)。
我正在寻找的是,我们可以使用Spark Core本身而不是使用Spark SQL,而且我不看代码,Spark Core中是否有可用的操作?
请就此提出建议。
此致 香卡。
答案 0 :(得分:0)
您可以将两个RDD带到相同的形状,并使用subtract
删除常用元素。
如上所述,rdd1
file1
和rdd2
来自file2
,您可以执行以下操作:
val userScore2 = rdd2.map{case (name, score, sport, country) => (name, score, sport)}
val in1andNotin2 = rdd1 subtract userScore2
val in2andNotIn1 = userScore2 subtract rdd1