基本上,我在两个文本文件中有两组数据。一组数据采用以下格式:
a,DataString1,DataString2(一行)(第一个字符在每个条目中但不相关)
....(依此类推)
第二组数据格式为:
数据,数据数据,数据,数据,数据数据(一行)(用逗号或空格分隔,但我能够使用正则表达式处理这个,所以'不是问题)
....(等等)
所以我需要做的是检查DataString1和DataString2是否同时出现在第二组数据的任何一行上。
目前我这样做是这样的:
// spark context is defined above, imported java.util.regex.Pattern above as well
case class test(data_one: String, data_two: String)
// case class is used to just more simply organize data_one to work with
val data_one = sc.textFile("path")
val data_two = sc.textFile("path")
val rdd_one = data_one.map(_.split(",")).map( c => test(c(1),c(2))
val rdd_two = data_two.map(_.split("[,\\s*]"))
val data_two_array = rdd_two.collect()
// this causes data_two_array to be an array of array of strings.
one.foreach { line =>
for (array <- data_two_array) {
for (string <- array) {
// comparison logic here that checks finds if both dataString1 and dataString2
// happen to be on same line is in these two for loops
}
}
}
我怎样才能让这个过程更有效率?目前它确实正常工作,但随着数据量的增长,这变得非常无效。
答案 0 :(得分:1)
对于大小为m * n的所有元素,双循环扫描扫描,其中m,n是每组的大小。您可以从join开始消除行。由于您要验证2列,请确保连接处理这些列。