簡體   English   中英

如何使用scala + spark比較兩個rdds? 兩者都沒有鑰匙?

[英]How to compare two rdds using scala+spark.? There is no key in both the rdds?

我想比較兩個RDD中的數據。 如何迭代和比較一個RDD中的字段數據與另一個RDD中的字段數據。 在Eg文件下面:

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

在上面,具有第1 2條記錄的兩個文件都相同,但順序不同。 現在我想比較rdds和只打印不同的記錄,即

 File2
 3 Loyleeie 45678 12:40 London  9001 abc

我不想在兩個rdds中都獲得前2個記錄,因為兩者相同,但是順序不同。請您解釋一下如何在scala中使用rdds來做到這一點。

我嘗試了許多選項,例如減法和while循環。 但沒有運氣

我剛剛在“ file2”第二記錄中更改了,現在我想在file2和修改后的字段中打印第二記錄和第三記錄。 我不知道哪個字段被更改,它只是比較file1如果不匹配,則打印不同的記錄並在另一行中打印哪些字段已更改

假設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")

這里的name是字符串中的第二個字段(最初修剪空格)

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

如果tab是您的分隔符,請相應地替換它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM