RDD 编程初级实践

一、实验目的
(1)熟悉 Spark 的 RDD 基本操作及键值对操作;
(2)熟悉使用 RDD 编程解决实际具体问题的方法。 
二、实验平台
  操作系统:Ubuntu16.04
  Spark 版本:2.1.0
三、实验内容和要求
1.spark-shell 交互式编程
请到本教程官网的“下载专区”的“数据集”中下载 chapter5-data1.txt,该数据集包含
了某大学计算机系的成绩,数据格式如下所示:
Tom,DataBase,80
Tom,Algorithm,50
Tom,DataStructure,60
Jim,DataBase,90
Jim,Algorithm,60
Jim,DataStructure,80
……
 
 
请根据给定的实验数据,在 spark-shell 中通过编程来计算以下内容: 

进入spark/bin目录下输入spark-shell启动spark

  (1)该系共有多少学生;

 (2)该系共开设来多少门课程;

(3)Tom 同学的总成绩平均分是多少;

val lines = sc.textFile("file:///usr/local/sparkdata/Data01.txt")
lines.filter(row=>row.split(",")(0)=="Tom")
.map(row=>(row.split(",")(0),row.split(",")(2).toInt))
.mapValues(x=>(x,1)).
reduceByKey((x,y) => (x._1+y._1,x._2 + y._2))
.mapValues(x => (x._1 / x._2))
.collect()

 (4)求每名同学的选修的课程门数;

val lines =sc.textFile("file:///home/hadoop/桌面/data.txt")

line.map(row=>(row.split(",")(0),row.split(",")(1))).

mapValues(x=>(1)).

reduceByKey((x,y)=>(x+y)).

collect()

 

 (5)该系 DataBase 课程共有多少人选修;

 val lines =sc.textFile("file:///home/hadoop/桌面/data.txt")

line.filter(row=>row.split(",")(1)=="DataBase").

count()

 

(6)各门课程的平均分是多少;

 val lines =sc.textFile("file:///home/hadoop/桌面/data.txt")

line.map(row=>(row.split(",")(1),row.split(",")(2).toInt)).

mapValues(x=>(x,1)).

reduceByKey((x,y)=>(x._1+y._1,x._2+y._2)).

mapValues(x=>(x._1/x._2)).

collect()

(7)使用累加器计算共有多少人选了 DataBase 这门课。

val lines =sc.textFile("file:///home/hadoop/桌面/data.txt")
val pare = lines.filter(row=>row.split(",")(1)=="DataBase").
map(row=>(row.split(",")(1),1))
val accum =sc.accumulator(0)
pare.values.foreach(x => accum.add(x))
accum.value

原文地址:https://www.cnblogs.com/xjmm/p/14356676.html