繁体   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