一、编写独立应用程序实现求平均值问题
每个输入文件表示班级学生某个学科的成绩,每行内容那个由两个字段组成,第一个使学生名字,第二个是学生成绩;编写spark独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。
供参考。
Algorithm 成绩:
小明 92
小红 87
小新 82
小丽 90
Database 成绩:
小明 95
小红 81
小新 89
小丽 85
Python 成绩:
小明 82
小红 83
小新 94
小丽 91
平均成绩如下:
(小红,83.67)
(小新,88.33)
(小明,89.67)
(小丽,88.67)
源代码如下:
import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ import org.apache.spark.SparkConf import org.apache.spark.HashPartitioner object SimpleApp { def main(args:Array[String]) { val conf = new SparkConf().setAppName("SimpleApp") val sc = new SparkContext(conf) val dataFile = "file:///usr/local/spark/input2" val data = sc.textFile(dataFile,3) val res=data.filter( _.trim().length>0).map(line=>(line.split(" ")(0).trim(),line.split(" ")(1).trim().toInt)).partitionBy(new HashPartitioner(1)).groupByKey().map(x=>{ var n=0 var sum=0.0 for(i<-x._2){ sum=sum+i n=n+1 } val avg=sum/n val format=f"$avg%1.2f".toDouble (x._1,format)}) res.saveAsTextFile("/home/hadoop/result") } }