目标文件loudacre.txt (文件存于我的Linux训练机上面的 /home/training/Documents/loudacre.txt ) 文件的每行用一个 TAB 分割
代码:
//导入文件
var trainingrecord = sc.textFile("file:///home/training/Documents/TrainingRecord.txt")
//使用TAB分割,并转化为K-value对,name为key,培训时间(也就是每行第三个)为value
var quiz1 = trainingrecord.map(_.split('\t')).map(pair => (pair(0),Integer.parseInt(pair(2))))
//给每个name的出现次数计数
var quiz1_count = quiz1.map(line => (line._1,1)).reduceByKey(_+_)
//对相同key的value进行求和
var quiz1_sum = quiz1.reduceByKey(_+_)
//将quiz1_sum和quiz1_count进行求和,必须两个key-value对的key相同才能这样做,会变成(key,(value,value))结构
var quiz1_temp = quiz1_sum.join(quiz1_count)
//对quiz1_temp进行格式化,每行的每个字段之间用TAB分割
var quiz1_res = quiz1_temp.map(line => line._1+"\t"+line._2._1+"\t"+(line._2._1/line._2._2)+"\t"+line._2._2)
//循环输出格式化后的结果
quiz1_res.foreach(println)
//过滤出总时间大于8的结果并输出
quiz1_sum.filter(line => line._2 > 8).foreach(println)