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