赞
踩
基于《Spark编程基础(Scala版)》
前面已经基于docker搭建好spark集群,集群为一台master和两台slave,主机为windows系统,集群搭建在linux下。
1.熟悉Spark的RDD基本操作及键值对操作;
2.熟悉使用RDD编程解决实际具体问题的方法。
1.spark-shell交互式编程
2.编写独立应用程序实现数据去重
3.编写独立应用程序实现求平均值问题
数据集包含了某大学计算机系的成绩,数据格式如下所示:
Tom,DataBase,80
Tom,Algorithm,50
Tom,DataStructure,60
Jim,DataBase,90
Jim,Algorithm,60
Jim,DataStructure,80
根据给定的实验数据,在spark-shell中通过编程来计算以下内容:
登陆spark并打开spark-shell:
./bin/spark-shell
执行以下代码:
val lines=sc.textFile("/test/Data1.txt")//打开文件
val par=lines.map(row=>row.split(",")(0))//切分取第一数值
val distinct_par=par.distinct()//去重
distinct_par.count//输出
输出结果如下:
答:该系总共有265名学生。
执行如下代码:
val par=rdd.map( row=>row.split(",")(0))
var count=par.distinct()
println("学生总人数:"+count.count())
结果如下:
答:该系共开设了8门课程。
执行如下代码:
val Tom=input.filter(t => t.split(",")(0) == "Tom")//找到tom
val Tom_1=Tom.map(t => (t.split(",")(0), (t.split(",")(2).toInt,1)))//构造一种数据结构(Tom,(成绩,1)),这样的话我们就可以得到Tom的总课程成绩以及总课程门数
val Tom_2=Tom_1.reduceByKey((a,b)=>(a._1+b._1,a._2+b._2))//将上面得到的(成绩,1)全部加起来
Tom_2.mapValues(a=>a._1/a._2).first()//将总成绩除以总课程数
结果如下:
答:平局分是30。
代码如下:
scala> input.map(t=>(t.split(",")(0), (t.split(",")(1),1))).reduceByKey((a,b)=>(a._1,a._2+b._2)).mapValues(a=>a._2).foreach(println)
(Bartholomew,5)
结果如下:
代码:
scala> input.filter(t => t.split(",")(1)=="DataBase").count()
结果如下:
答:共有126人选修。
代码如下:
input.map(t=>(t
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。