Apache Spark - 如何从两个RDD获取不匹配的行

时间:2015-07-01 11:01:30

标签: java apache-spark

我有两个不同的RDD,每个RDD都有一些公共字段,基于这些字段我希望从RDD1或RDD2获得不匹配的记录。[RDD1中可用的记录但在RDD2中不可用] [RDD2中可用的记录但不可用在RDD1]

我们似乎可以使用subtractsubtractbyKey

示例输入:

**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中是否有可用的操作?

请就此提出建议。

此致 香卡。

1 个答案:

答案 0 :(得分:0)

您可以将两个RDD带到相同的形状,并使用subtract删除常用元素。

如上所述,rdd1 file1rdd2来自file2,您可以执行以下操作:

val userScore2 = rdd2.map{case (name, score, sport, country) => (name, score, sport)}

val in1andNotin2 = rdd1 subtract userScore2

val in2andNotIn1 = userScore2 subtract rdd1