《《Spark大数据技术与应用案例教程》教案第6课计算学生的平均成绩.docx》由会员分享,可在线阅读,更多相关《《Spark大数据技术与应用案例教程》教案第6课计算学生的平均成绩.docx(7页珍藏版)》请在优知文库上搜索。
1、课题计算学生的平均成绩课时2课时(90min)教学目标知识技能目标:(1)掌握键值对RDD的创建方法(2)掌握键面寸RDD的转换操作素质目标:掌握编程思路,培养逻辑思维能力教学重难点教学重点:键值对RDD的创建,键值对RDD的转换操作教学睚点:键值对RDD的转换操作教学方法案例分析法、问答法、讨论法、i井授法教学用具电脑、投影仪、多媒体课件、教材教学过程主要教学内容及步骤课前任务【教师】布置课前任务,和学生负责人取得联系,让其提醒同学通过APP或其他学习软件,完成课前任务请大家了解利用Spark计算平均成绩的方法。【学生】完成课前任务考勤【教师】使用APP进行签到【学生】班干部报请假人员及原因
2、问题导入(5min)【教师】提出以下问题:你知道哪些计算学生平均成绩的方法?它们的优缺点各是什么?【学生】思考、举用答传授新知【教师】通过学生的回答引入新知,介绍键值对RDD的创建和犍值对RDD的转换操作等内容一、键值对RDD的创建【教师】讲解键值对RDD的创建方法键值对RDD(pairRDD)是指一种特殊类型的RDD,其中每个元素都是f键值对(key.value),由一个键(key)和一个相应的值(value)组成。读取的数据形式不同,创建键值对RDD的方式也不同.(1)直接创建键gRDDe(2)使用map。方法创建键值对RDDe【教师】通过例子,帮助学生掌握键值对RDD的创建方法【例2-1
3、3直接创建健值对RDD,输出结果如图2-24所示。(hadoop(3bogon-$pyspark陶建键面寸RDDpair.rdd=sc.parallelize(,keyl,l),(,key2,2),(,key3,3)爆出键值对RDD的元素pair-rdd.fbreach(print)pairrdd.foreach(print)(,key3,3)(,key2,2)(,key,1)图2-24输出键值对RDD(pair.rdd)的元素【例2-14使用m叩。方法创建键值对RDD,输出结果如图2-25所示。|hadoopbogon-$pyspark取本地文件hello_spark.txt,并创建名为wo
4、rds的RDDwords=sc.textFile(filezusrlocalsparkmycodehello_spark.txt)# 将每行文本按空格拆分为单词,返回一个新的RDDpair_rdd=words.flatMap(lambdalineline.splitC,)# 将每个单词映射为(单词,1)键值对,创建T键值对RDDpair_rdd_map=pair-rdd.map(lambdaword(word,l)# 输出键值对RDD的元素pair_rdd_map.fbreach(print)pair_rdd_map.foreach(print)(Hello,1)(Spark,1)(,D(,l
5、ove,1)(Spark,1)图2-25输出键值对RDD(pair_rdd_map)的元素二、犍值对RDD的转换操作【教师】讲解犍值对RDD的转换操作键值对RDD能够使用RDD基本的转换操作,同时它具有其独有的转换操作,如keys。、values()sgroupByKey().reduceByKey()xjoin。等。常用的键值对RDD转换操作如表2-6所示。表2-6常用的键值对RDD转换操作转换操作说明keys()返回一个由所有键组成的RDDvalues()返回一个由所有值组成的RDDgroupByKey(numPartilions)根据键(key)对RDD中的元素进行分组,并将每个唯T(k
6、ey)对应的值(value)放入一个迭代器中,返回一个(K,Iterable)类型的数据集reduceByKey(func,numPartitions)在(KN)键值对的RDD上调用时,返回一个(KV)类型的数据集,其中每个键对应的值都使用给定的func函数进行聚合。可以理解为在groupByKey()的基础上,再对相同键的元素进行聚合操作Join(OtherRDD)将两个键值对RDD中键(key)相同的数据的值(value)存放在f湎中,R三回两例假寸RDDtPm三三(key)果CombineByKey(createCombiner.mergeValue,mergeCombiners,num
7、Partitions,partitionFunc)针对键值对RDD进行求和、求平均值、计数等聚合操作,返回一个新的键值对RDD,其中每个键关联一ZMl合结果。CreateCombiner代表一个函数,用于将每个键的第一个值转换为累加器的初始值;mergeValue代表一个函数,用于将当前键的值合并到相应的累加器中;mergeCombiners代表一个函数,用于合并两个累加器;numPartitions(可选)代表分区数;partitionFunc(可选)代表一个函数,用于自定义轴分区方式sortByKey(ascending)按照键(key)对RDD中的元素进行排序。参数ascending的默
8、认值为True,即升序排列mapValues(func)对RDD中的每个值应用指定的函数func,并保持键不变【高手点拨】gr。UPByKey(燥作返回的是一由键(key)和与之关联的值列表(Iterable)组成的键值对数据集。也就是说gr。UPByKey()会为每个key生成一个值列表,每个值列表被保存为一个可迭代对象。可以使用迭代器(iterator)遍历值列表中的元素,访问RDD分组操作的结果。【教师】通过例子,帮助学生掌握键值对RDD的转换操作【例2-15创建一个包含4个握值对的RDD,执行keys。和VmUeS()操作分别查看RDD键值对的键和值,如图2-26和图2-27所示。ha
9、doopbogon$pyspark敬建f键三7寸RDDpairs=sc.parallelize(l,apple),(2,orange),(3,banana),(4,pear)#获取所有key组成的RDDkeys=pairs.keys()#输出所有keyprint(keys.collect()#获取所有value组成的RDDvalues=pairs.values()#输出所有valueprint(values.collect()print(keys.collect()Prlnt(ValUeS.collect。)1,2,3,4,apple,orange,banana,pear图2-26查看RDD的
10、所有键图2-27直看RDD的所有值【例2-16创建一个包含5个键值对的RDD,执行gr。UPByKM)操作按照城市对数据进行分组,输出结果如图2-28所示。执行reduceByKey()操作按照城市对数据进彳论组,并对同一个城市内的人数进行累加,输出结果如图2-29所示。hadoopbogon$pysparkrdd=sc.parallelize(北京张三上海李四北京二“王五广州“赵六上海二钱七)# 按照城市对数据进行分组grouped_rdd=rdd.groupByKey()# 输出(城市,可迭代对象)grouped-rdd.freach(print)# 按照城市对数据进行分组,并对同一个城市
11、内的人数进行累加reduced_rdd=rdd.mapValues(lambdax:1).reduceByKey(lambdaa,b:a+b)# 输出(城市,人数)reduced_rdd.colleci()grouped.rdd.foreach(print)(上海,)(广州,)(北京,)图2-28groupByKey()操作的输出结果reducedrdd.collect。(北京,2),(广州,1),(上海,2)图2-29reduceByKey(func)操作的输出结果【例2-17创建两个健值对RDD,执行join。操作合并两个RDD,输出结果如图2-30所示。同样,执行IeftoUterJoi
12、n()和rightOutcrJoin()操作合并两个RDD,输出结果如图2-31和图2-32所示。|hadoopbogon-$pyspark怆J建第f键值对RDDrddl=sc.parallelize(apple,1),(orange,2),(banana,3),(pear,4)舱犍第二个键值对RDDrdd2=sc.parallelize(,apple,5),(orange,6),(peach.7),(pear,8)# 执行join(操作合并rddl和rdd2joined_rdd=rddl.join(rdd2)# 输出合并结果joined_rdd.foreach(print)# 执行IefIO
13、UlerJOin()操作合并rddl和rdd2joined_rdd=rdd1.leftOuterJoin(rdd2)#输出合并结果joined_rdd.foreach(print)科执行rightOulerJoin(臊作合并rddl和rdd2joined_rdd=rdd1.rightOuterJoin(rdd2)#输出合并结果joined_rdd.foreach(print) joined rdd. foreach(print) (,pear, (4, 8) (orange, (2, 6) apple, (1, 5)(banana. (3. NOne)joinedrdd.foreach(pri
14、nt)(,pear,8)(apple,(1,5)(,orange,(2,6)2-31图2-30join(操作的输出结果joined.rdd.foreach(print)(apple,(1,5)(orange,(2,6)(peach,(None,7)(pear,(4,8)图2-32HghtOuterJoinO操作的输出结果【高手点拨】IeftoUterJoino操作会将左侧RDD中所有的键都保留下来,并将其与右侧RDD中相同键值的数据进行匹配,如果右侧RDD中没有对应的数据,则对应位置的值为None.这样可以保留左侧RDD中的全部信息并补充右侧RDD中的信息erightOUIerJOinO操作与IenOUIerJoino操作类似。【例2-18创建一个犍值对RDD,然后定义三个函数执行CombineByKeyO操作,得到每个键对应的平均值,输出结果如图