0

我想比较两个RDD中的数据。如何迭代和比较一个RDD中的字段数据与另一个RDD中的字段数据。以下Eg文件:`如何使用scala + spark比较两个rdds?这两个rdds都没有钥匙?

File1 
f1 f2  f3 f4 f5  f6 f7 
1 Nancyxyz 23456 12:30 NEWYORK 9000 xyz 
2 ranboxys 12345 12:30 NEWYORK 9000 xyz 

File2 
f1 f2  f3 f4 f5  f6 f7 
2 ranboxys 12345 12:30 NEWYORK 9000 xyz 
1 markalan 23456 12:30 LONDON 7000 xyz 
3 Loyleeie 45678 12:40 London 9001 abc 

在上述两个文件中,前两个记录是相同的,但顺序不同。 现在我想比较这两个RDDS并打印不同的记录即

File2 
3 Loyleeie 45678 12:40 London 9001 abc 

我不想让在两个RDDS第2条,因为两者都是相同的,但顺序不同 能否请你解释如何在scala中使用rdds做到这一点

我尝试somay选项,如减法和while循环。但没有运气

我只是改变了“file2”第2条记录现在我想打印第2条记录和第3条记录在file2和修改后的字段。我不知道哪场发生改变,它只是比较文件1,如果它不匹配,然后打印不同的记录,并打印在另一条线路都有哪些字段转变

+0

您是否尝试将RDD转换为DataFrame,然后使用'except'方法? – LiMuBei

+0

@maasg非常感谢您分享我的想法。它没有得到只有第三个不同的记录,我得到2个记录在file2 1 Nancyxyz 23456 12:30 NEWYORK 9000 xyz 3 Loyleeie 45678 12:40伦敦9001 abc我没有得到它在减函数最新错误。有没有其他方法。 – Nathon

回答

3

假设File1File2的类型为:RDD[String],下面的操作将包含File2的所有元素,但不是在File1

scala> val File1 = spark.sparkContext.textFile("File1.txt") 

scala> val File2 = spark.sparkContext.textFile("File2.txt") 

scala> File2.subtract(File1).collect 
res0: Array[String] = Array(" 3 Loyleeie 45678 12:40 London 9001 abc") 

这名字符串中的第二场(最初修剪的空间)

scala> File2.subtract(File1).map { x => x.split(" ")(2) }.collect 
res1: Array[String] = Array(Loyleeie) 

如果制表符是您的分隔符,请将其替换为

+0

okk任何其他的方法,你可以请这个@vdep – Nathon

+0

@Nathon帮忙,可能你应该提供你到目前为止尝试过的方法,并指出你正在挣扎的地方,然后我们可以扩展更多。 – vdep