《《Spark大数据技术与应用案例教程》教案第14课实时计算电影热度.docx》由会员分享,可在线阅读,更多相关《《Spark大数据技术与应用案例教程》教案第14课实时计算电影热度.docx(11页珍藏版)》请在优知文库上搜索。
1、课题实时计算电影热度课时2课时(90min)教学目标知识技能目标:(1)熟悉DStream的转换操作(2)熟悉DStream的输出操作素质目标:培养自我学习和持续学习能力,能够及时掌握新技术和工具,并将其应用到实际项目中教学重难点教学重点:DStream的转换操作和输出操作教学睚点:使用DSlream的输出操作输出实时处理的结果教学方法案例分析法、问答法、讨论法、i井授法教学用具电脑、投影仪、多媒体课件、教材教学过程主要教学内容及步骤课前任务【教师】布置课前任务,和学生负责人取得联系,让其提醒同学通过APP或其他学习软件,完成课前任务请大家了解DStream的转换操作和输出操作。【学生】完成课
2、前任务考勤【教师】使用APP进行签到【学生】班干部报请假人员及原因问题导入【教师】提出以下问题:在实时计算中,SparkStreaming是如何读取实时数据的?【学生】思考、举手回答传授新知【教师】通过学生的回答引入新知,介绍DStream的转换操作和输出操作等知识一、DStream的转换操作【教师】介绍DStream的转换操作在实时计算中,数据会源源不断地到达,SparkStreaming读取数据时会创建DStream,将实时数据流划为一系列小的批次,每个批次包含一段时间内的数据。一旦创建了DStream,就可以对其应用各种转换操作和输出操作来处理数据.DStream的转换操作通常包括无状态
3、转换操作和有状态转换操作.1.DStream无状态转换操作DStream无状态转换操作是指输出结果只与当前批次的数据相关,不依赖于之前或之后批次的数据.在任务一的任务实施中,词频统计应用程序wordCount.py中的DStream就采用了无状态转换操作,每次统计只统计当前批次到达的单词的词频,与其他批次的单词无关。DStream无状态转换操作的常用方法如表4-2所示。表4-2DStream无状态转换操作的常用方法方法说明map(func)对当前DStream的每个元素采用函数func进行转换,返回一个新的DStreamflatMap(func)与map相似,但是每个输入项可以被映射为0个或者
4、多个输出项,返回一个新的DStreamfilter(func)返回一个新的DSiream,仅包含源DStream中满足函数func的项repartition(numPartitions)通过创建更多或者更少的分区改变DStream的并行程度,返回一个新的DStreamunion(other)将当前DStream与另一个DStream进行合并,返回一个新的DStream,新的DStream中包含当前DStream和其他DStream的元素count()统计DStream中每个RDD包含的元素数量reduce(func)利用函数func聚集源DStream中每个RDD的元素,返回一个包含单元素RD
5、DS的新DStreamCountByValueO计算DStream中每个元素的出现次数,返回一个新的DStreamFeduceByKey(func,numPartiiions)将具有相同键的元素进行聚合,并使用提供的函数func来执行聚合操作,返回一个新的DStreame参数func表示用于聚合操作的函数;参数numPartitions表示分区数mapValues(func)将DStream中每个键值对的值应用指定的函数func,并保持键不变,返回一个新的DStreamjoin(other.numPartitions)将两个DStream进行连接操作,返回一个新的DStream,结果包含两个原
6、始DStream中具有相同键的元素transfbrm(func)对DStream中的每个元素应用自定义函数func,返回一个新的DStream【教师】通过例子,帮助学生掌握DStream无状态转换操作【例4-3使用transform。方法从DStream中移除特定的数据。打开第I个终端,启动PySpark交互式执行环境,并执行以下代码。hadoopbogon$pysparkfrompyspark.streamingimportStreamingContextssc=StreamingContext(sc,10)#创建DStreamlines=ssc.socketTextStream(local
7、host,9999)(详见教材)打开第2个终端,执行命令并持续输入文本,向端口发送数据流,如图4-17所示.此时,第1个终端会持续输出过滤掉love之后的单词,如图4-18所示。Time:2023-08-0315:49:50ISparkTime:2023-08-0315:50:00IHadoopTime:2023-08-0315:50:10hadoopbogon-$nc-Ik9999IloveSparkamIloveHadooplearningIamlearningSparkSPark图4-17输入文本图4-18输出过滤掉love之后的单词2DStream有状态转换操作与无状态转换操作不同,D
8、Streain有状态转换操作是指操作当前批次数据时,需要使用之前批次的数据或中间结果。有状态转换操作会将新到达的数据与当前状态中的部分数据或全部合并,然后计算结果。有状态转换包括基于滑动窗口的转换操作和UMaIeStaleByKey转换操作。(1)基于滑动窗口的转换操作。【教师】利用多媒体展示“基于滑动窗口的转换操作的工作过程”图片,并进行讲解基于滑动窗口的转换操作是指固定持续时间的窗口以固定滑动间隔在DStream上滑动,然后对窗口内的数据执行计算操作,生成新的RDD作为窗口DStream的一个RDDo基于滑动窗口的转换操作的工作过程如图4-19所示。首先,设置窗口的持续时间和滑动间隔,分别
9、为3秒和2秒;然后在第3秒时,对第1一3秒的3个RDD执行计算操作,生成一个新的RDD(即第3秒时窗口的计算结果);两秒后,又会对第35秒的3个RDD执行计算操作,生成T新的RDD(即第5秒时窗口的计算结果);一个个窗口的计算结果组成了窗口DStream.第1秒第2秒第3秒第4秒第5秒Y:DStream一:|TFL-|-IT窗Il操作窗口一门rhDStream第1秒时的窗口第3秒时的窗口第5计算结果计算结果图4-19基于滑动窗口的转换操作的工作过程基于滑动窗口的转换操作至少需要两个参数。WindowDuration:窗口的持续时间,即窗口覆盖的时间长度0SlideDuration:窗口的滑动间
10、隔,即执行一次计算的时间间隔.【小提示】WindowDuration和SlideDuration这两个参数值必须是批处理时间间W基于滑动窗口的转换操作的常用方法如表4-3所示。表4-3基于滑动窗口的转换操作的常用方法匚秒时(计算经鬲的整勺窗口;果数倍。方法说明window(vindowDuration,SlideDuration)将数据流按照指定的窗口持续时间和滑动间隔进行分组,返回一个新的DStrcamCountByWindow(WindowDuration,SlideDuration)在指定的窗口持续时间内计算数据流中元素的数量一个新的DStream,返回reduceByWindow(fu
11、nc,invFunc,WindowDuration,SlideDuration)将DStream中的数据按照指定的窗口持续时间和滑动间隔进行分组,并在每个窗口上应用func函数进行聚合操作,返回一个新的DStreame参数func表示指定的聚合函数;参数invFunc表示反向聚合函数,用于将两个值取消合并为一三FeduceByKeyAndWindow(func,invFunc,WindowDuraiion,SlideDuration,在滑动窗口上对键值对进行聚合操作,返回一个新的numPartitions,RlterFunc)DStream参数numPartitions(可选)代表分区数;参数
12、IiIterFunc(可选)代表过滤函数,用于过滤不满足条件的键值对.需要注意的是,使用此操作必须启用检杳点(checkpointing)功能countByValueAndWindow(WindowDuration,SlideDuration,numPartitions)计算窗口中每个元素的出现次数,返回一个新的DStream【教师】通过例子,帮助学生掌握基于滑动窗口的转换操作【例4-4使用WindoVV()方法截取DStream中的元素。打开第1个终端,启动PySpark交互式执行环境,并执行以下代码。hadoopbogon-$pysparkfrompyspark.streamingimpo
13、rtStreamingContextssc=StreamingContext(sc,1)lines=ssc.socketTextStream(localhost9999)(详见教材)打开第2个终端,执行命令并按照每秒1个字母的速度持续输入文本,向端口发送健流,如图4-20所示。此时,第1个终端的输出结果如图4-21所示。从图中可以看出,第1秒的输出结果为a,第2秒的输出结果为ab,第3秒的输出结果为abc;因为第4秒时a已经滑出了窗口,所以第4秒的输出结果为bcdTime:2023-08-0316:24:34aTime:2023-08-0316:24:35abTime:2023-08-0316
14、:24:36abhadoop0bogon-$nc-Ik9999CabTime:2023-08-0316:24:37I图4-20输入文本图4-21WindoW()方法示例的输出结果【例4-5使用reduceByKeyAndWindow()方法对窗口内数据进行词频统计。打开第1个终端,启动PySpark交互式执行环境,并执行以下代码。|hadoopbogon-$pysparkfrompyspark.streamingimportStreamingContext(详见教材)【高手点拨】如果在应用程序中使用reduceByKeyAndWindow()或UPdateStateByKey()方法,则必须提
15、供检直点目录以允许定期保存RDD检直点。执行例4-5的代码之前,需要先新建检查点目录7usr/local/spark/mycode/DStream/checkpointH.打开第2个终端,执行命令并按照每秒1个字母的速度持续输入文本,向端口发送数据流,如图4-22所示。此时,第1个终端输出词频统计结果,如图4-23所示。2021-01-031618:5DTite20n*0l03 16:“:Mhadoop9bogon *$ nc -Ik 9999图4-22输入文本Tg(b, Ca,2023-01-03 16:39:011)22023-0-03 16:19:022) D20230103 16:39:03TiM(,bCe*