zipWithIndex():添加全局有序的索引
zipWithUniqueId只保证唯一,不保证连续性,中间可能有gap(间隔)。
val sparkConf = new SparkConf().setAppName("exam-filterTest").setMaster("local[*]")
val sc = new SparkContext(sparkConf)
//读数据
val lines = sc.textFile(args(0))
// 每行的数据,生成一个
// RDD[String] Array(a,b,...),Array(s,r,...)...
val lineArr = lines.map(_.split("\\s+"))
//println(line.map(_.toList).take(2).toBuffer)
/**
* 包含 “spark” 的行 行号问题待解决?已经解决
*/
var i = 0
//局部的,行号会有变量
// val linesMap = lineArr.map(x => {
// i += 1
// (x,i)
// })
// 索引是从0开始的
val linesMap = lineArr.zipWithIndex() //这行代码保证多线程时候行号是一致的
//println(linesMap.map(x => (x._1.toList,x._2)).collect().toBuffer)
val linesContainSpark = linesMap.filter(_._1.contains("Spark"))
//println(linesContainSpark.map(x => (x._1.toList,x._2)).collect().toBuffer)
val linesTarget = linesContainSpark.map(x => (x._1.toList,x._2+1))
linesTarget.saveAsTextFile("E:/sparkDataTest/out-containSpark")