《Spark大数据技术与应用案例教程》教案第23课实时统计逾期还款的用户数量.docx
课题实时统计逾期还款的用户数量课时2课时(90min)教学目标知识技能目标:(1)掌握自动生成数据源的方法。(2)使用DStream的不同操作分析数据。素质目标:综合应用所学知识,提升归纳总结能力和实践能力.教学重难点教学重点:使用DStream的不同操作分析健教学睚点:实时统计数据教学方法案例分析法、问答法、讨论法、i井授法教学用具电脑、投影仪、多媒体课件、教材教学过程主要教学内容及步骤课前任务【教师】布置课前任务,和学生负责人取得联系,让其提醒同学通过APP或其他学习软件,完成课前任务请大家回顾前面所学内容.【学生】完成课前任务考勤【教师】使用APP进行签到【学生】班干部报请假人员及原因问题导入【教师】提出以下问题:如何统计实时数据?【学生】思考、举手回答课程实践【教师】描述和分析本次任务内容,并详细演示任务操作过程,弓I导学生操作【任务描述】使用SparkStreaming实时统计逾期还款的用户数量,有助于银行更好地管理业务。如果逾期还款的用户数量增加,银行可以迅速调整管理策略,提高监管强度,从而最大程度地减少损失。本任务先以银行个人信贷业务数据为基础,自动生成数据源;然后使用SparkStreaming实时统计逾期还款的用户数量。1.自动生成数据源【任务分析】本任务先设置每隔10秒从"CreditCarcLdataiSV"文件中随机获取100行数据并写入新的日志文件中,然后将新生成的日志文件存放在新建的7usr/local/spark/mycode/CreditCard/credit_dataH目录下。这样做便可以自动生成数据源。打开PyCharm,在"CreditCard"目录下新建"MsgProducepy"文件,然后在该文件中编写应用程序,自动生成幡源。实现步骤如下。步骤1定义generateOgjlleo函数。步骤2>在函数内部,定义两个变量log_file_directory和da(a_file_paih,分别表示存储日志文件的目录和数据文件路径。步骤3A在函数内部,使用无限循环whileTrue不断生成日志文件。(详见教材)【参考代码】importtimeimportrandomdefgenerate_log_file():#存储日志文件的目录和数据文件路径log_file_directorr="/usr/local/spark/myco<le/CreditCard/credit_data"data_file_path='7usrlocalsparkmycodeCreditCardCreditCard-data.csv"whileTrue:# 获取当前时间的时间戳timestamp=int(time.time()# 构建日志文件路径log_file_paih=flog_file_directory/log_timestamp.txt"# 打印时间戳print(timestamp)卖取数据文件的所有行withopen(data_file_path,"r")asdata-file:lines=data-file.readlines()# 打乱列表中的元素顺序random.shuffle(lines)# 获取列表中的前100个元素SelectedJines=lines:100# 将获取到的数据写入日志文件withopen(log_file_path,"w")aslog-file:log_file.writelines(selected_lines)# 程序执行暂停10秒time.sleep(10)if_name_=,'_main_":碉用generaieog_file()函数开始生成日志文件generatejog_file()【运行结果】在PyCharm中运行代码,控制台显示时间戳提示信息,如图7-6所示.,7usrlocalsparkmycodeCrediCardcredit-data,目录下生成包含银行个人信贷业务数据的日志文件,每个日志文件中包含I(X)行数据。16925378331692537843169253785316925378631692537873图7-6时间戳提示信息2.实时统计逾期还款的用户数量【任务分析】本任务先使用SparkStreaming监视7usrlocalsparkmycodeCreditCardcredit.data,f目录,每隔10秒读取新产生的日志文件创建DStream;然后使用DStream提供的方法分别统计逾期3059天还款的用户数量、逾期6089天还款的用户数量和逾期90天以上还款的用户数量。打开PyCharm,在"CreditCard"目录下新建,StreamingAnalysis.pyw文件,然后在该文件中编写应用程序,实时统计逾期还款的用户数量。实现步骤如下。步骤I创建SparkContext对象。步骤2A创建StreamingContext对象,将批处理时间间隔设置为10秒。步骤3A使用IeXlFiIeSIreamo方法创建DStream(即logstream),(详见教材)【参考代码】frompysparkimportSparkContextfrompyspark.streamingimportStreamingContext# 创建SparkContext对象sc=SparkContext(',local2'"MovieRatingSlreaming")# 创建StreamingContext对象,将批处理时间间隔设置为10秒ssc=StreamingContext(sc.10)# 创建DStreamIog-Stream=ssc.textFileStream("file:/usr/local/spark/mycode/CreditCard7credit_data")# 定义函数defprocess_stream(rdd):#忽略空的RDDifnotrdd.isEmply():frompyspark.sqlimportSparkSession# 创建SparkSession对象spark=SparkSession(sc)# 拆分RDD中的每行数据data_rdd=rdd.map(lambdaline:line.split(",")# 定义列名列表columns="Index","age","Monthlyincome","family","2yrs","Time30-59","Time60-89","Times90","UnsecuredLines","DebtRatio","OpenCredit","RealEstate"# 将RDD转换为DataFramedf=SPark.creaieDaiaFrame(daia_rdd,columns)# 过滤出逾期不同天数还款的用户数据,并统计用户数量overdue_count_30_59=df.filter(dfl"Time30-59">=l).count()overdue_count_60_89=df.filter(dfl"Time60-89">=l).count()overdue_count_90=df.filter(df"Times90">=l).count()# 输出逾期不同天数还款的用户数量Prin1(逾期3059天还款的用户数量:overdue_counl_30_59")PrinI(逾期6089天还款的用户数量:(overdue_counl_60_89)")PrinI(F逾期90天以上还款的用户数量:(overdue_count_90")# 将ProCeSs_stream函数应用于Iog_Slream中的每个RDDlog_stream.foreachRDD(process_s(ream)# 输出数据流中的内容和逾期不同天数还款的用户数量Iog-Stream.pprint()# 启动StreamingContext对象ssc.start()# 等待StreamingContext对象终止ssc.awaitTermination()【运行结果】在PyChann中运行代码,控制台输出数据流中的内容和逾期不同天数还款的用户数量,如图7-7所示。Time:2023。82823:25:2811454r74r425,rr,fer8.01l96387r.41919583,13,169515628216,1,8,2,。,C.3731285,.3746367,11,244261,38,5143,2r,rr,.9999999,.A9825389,Irl124612,45r783,lferferer.Gie552862,.e86674195f25fl13673r61r94l,lf,.27968822,.198893852,14,242e85,32,8ever,erere,0.663293468fe.l936e8,12,l147596,47,89,lf,.,.281278826,8.235591587,11.117488,25,37fr,j.855568929i.l74961,5r91487,71.583.0,0,8,0,8,8.245418681,.285611882,11,64394,28,5,f,.7456714i.153369326,6r法期3。59天还款的用户敛鼻:7逾朗6B89天迁软的用户故量:8泳期98天以上还款的用户敛员:5图7-7数据流与实时统计结果【小提示】运行"StreamingAnaIysispy"文件之前,请确保"MsgProducepy"文件处于运行状态。【学生】认真聆听,按照要求进行操作,如遇问题可询问老师【教师】巡堂辅导,及时解决学生遇到的问题课堂小结【教师】简要总结本节课的要点实时统计逾期还款的用户数量的操作【学生】总结回顾知识点作业布置【教师】布置课后作业请根据课堂所学知识,课后自己尝试实时统计数据的操作。【学生】完成课局王务教学反思