《Spark大数据技术与应用案例教程》教案第10课查询符合条件的商品信息.docx
课题查询符合条件的商品信息课时2课时(90min)教学目标知识技能目标:(1)了解DataFrame的数据查询方式(2)掌握DalaFrame的数据蛰询操作素质目标:培养举一反三的能力,学会融会贯通教学重难点教学重点:DataFrame的数据查询方式和数据查询操作教学睚点:使用不同的方式查询DataFrame的数据教学方法案例分析法、问答法、讨论法、i井授法教学用具电脑、投影仪、多媒体课件、教材教学过程主要教学内容及步骤课前任务【教师】布置课前任务,和学生负责人取得联系,让其提醒同学通过APP或其他学习软件,完成课前任务请大家了解DataFrame的数据查询方法.【学生】完成课前任务考勤【教师】使用APP进行签到【学生】班干部报请假人员及原因问题导入【教师】提出以下问题:应如何插寻DataFrame的数据?【学生】思考、举手回答传授新知【教师】通过学生的回答引入新知,介绍DataFre一、DataFramc的数据查询方式【教师】介绍DataFrame的数据查询方式已知“usrIOCal/SparkZmycodeZDataFrame”目录下伤件,它们的内容分别如图3-20和图3-21所示。打开9)aStudentjson保存=X"name":"王二","age":2。,"COllege":"信息学院("name":"张三","age":21,"COIIege机械学院"name':"李四","age":22,"COIIege":"信息学院"name":fi","age:22,-ColIege":"人文学院”)图3-20,student.jsonw文件内容分别读取两个文件中的数据并创建DataFrame,用询操作。hadoopbogon|$pyspark»>di=spark.read.json("file:/usr/local/spark/myco(»>df2=spark.read.json("file:/usr/local/sparkmyc<在Spark中,查询DataFrame数据的方式主要分为(1)使用CreateOrRePlaCeTemPVieW(name)方法,句查询数据。其中,参数name为临时视图的名称.【教师】通过例子,帮助学生掌握DataFrame的娄me的数据查询方式和数据宜询操作等知识"StudentJson”和lanother-student.json,文打刑0)aanother-stu"保存三Xname":"王二"Jphone*:"15136665211"name":"","phone:15136665212")name":"李四"phone":15136665213",name":"赵六'JphoneY'15136665214"图3-21"another_student.jsonM文件内容于后续讲解DataFrame的数据查询方式和数据查je/DataFrame/student.json")xle/DaiaFrame/anoiher_student.json")以下两种。将Da(aFrame注册为临时视图,然后通过SQL语攵据查询方式【例3-7使用SQL语句查询“StudentJson”文件中年龄大于20岁的学生信息,如图3-22»>df.createOrReplaceTempView("student")»>StudentDF=spark.sql("select*fromstudentwhereage>20H)»>studentDF.show()Iagecollegename+I21机械学院I张三II22信息学院I李四II22人文学院I赵六I图322年龄大于20岁的学生信息(2)使用DataFrame提供的数据查询方法,直接在DataFrame对象上进行直询。DataFrame的数据杳询操作属于懒操作,只有触发执行操作(即数据获取操作)时才会计算并返回结果。二、DagFrame的数据查询操作【教师】利用多媒体展示图表,然后讲解DataFrame的数据查询操作在SParkSQL中,DiUaFrame的数据查询操作包括条件查询、排序查询、分组查询和连接查询等,实现这些直询操作的常用方法如表3-3所示。表3-3DataFrame数据查询操作的常用方法分类方法说明条件查询IUter(Condition)使用给定条件筛选行,where。是仙CH)的别名.参数condition为筛选条件whcrc(condition)排序直询OnkrBy(*cok.ascending)。也rBy)和SOno方法均可用于排序,两者实现的效果相同,均可按照指定列对整强进行排序.参数cols(可选)表示要按其排序的Column对象列表或列名列表;参数ascending(可选)用于指定排序是升序还是降序,默认值为TrUe(升序)sort(*cols,ascending)分组查询grouBy(*cols)使用指定的列对DalaFrame进行分组.参数Cok表示要分组的列连接直询join(oher.on.how)使用给定的连接表达式与另一个DataFramC进行连接.参数OIher表示要连接的DalaFrame;参数on(可选)表示连接列名的字符串、列名列表、连接表达式(Column)或Column对象列表;参数how(可选)表示连接类型,包括inner%oulerleft-oulerlright-ouler.IeRsemi和cross,默认值为inner其他直询SeleCI(*8IS)直询指定字段的数据信息.参数8k表示指定字段se!ectExpr(*expr)SeleCl()的一z?变体,接受SQL表达式,参数“cxpr是一个可变参数,表示要处理的表达式,该表达式可以是字符串形式的SQL表达式,也可以是Column对象列表limit(num)直询前num行数据【教师】通过例子,帮助学生掌握DataFrame的数据查询操作【例3-8使用filter。方法查询并显示年龄大于20岁的学生信息,如图3-23所示。»>df.filter=df.filter("age>20")»>df,filter.show()IagecollegenameI211机械学院I张三II22|信息学院I李四II22|人文学院I赵六I图3-23年龄大于20岁的学生信息例3-9使用OrderByo方法分别按照age字段升序和降序排列学生信息,如图3-24所示.>»|dforderbyasc=df.orderBy("age")>»df.orderby.asc.show()Iage Collegelnamel升序I 20|信息学院I王二II 21|机械学院I张三II 22|信息学院I李四II 22|人文学院I赵六I降序>>> df. Orderby desc=df.orderBy("aqe",ascendinq=False)»> df_orderby_desc. show()Iage collegenameI 22|信息学院I学四I I 22|人文学院I赵六I I 21|机械学院I张三I I 20|信息学院I王二I图3-24按"age"字段排序的学生信息【例3-10使用即。UPByo方法根据c。IIegC字段对数据进行分组操作,然后按学院统计学生信息, 输出结果如图3-25所示。>» df_c rouppy=df . groupBy»> df_ roubb±. covlt(): ShI college)countIAegF,)f6w()- I和川g;IIPByc方法IK4 college字段进行分组I 使用CoUnt()方法按照学院统计学生人数院院院 学学学 械文总 机人信>»djqrupbymevn("age")ShOW(片I college)avg(age)I使川mean。方法按照学院统计学生的平均年龄I机械学院I21.0I人文学院I22.0I信息学院I21.0使用agg()方法按照学院统计学生的+最小年龄、最大年龄和平均年龄>>>fromDVSDark.salimoortfunctions己SF»>df_*oupby.agg(F.min("age").F.max("age").F.avg("age").sho()IColIegelmin(age)ma×(age)avg(age)|I机械学院I212121.01I人文学院I222222.0I信息学院I20|22121.0图3-25按学院统计学生信息【高手点拨】groupBy()方法常与agg()、COUnt()、mean。、max()xmin()和SUmO等方法合用,agg()方法用于计算每个分组的聚合结果;COUnt()方法用于计算分组的元素数;mean。、max。、min()与sum()方法分别用于计算分组中某字段的平均值、最大值、最小值与和。【例3-11使用join。方法根据name字段连接df和df2两个DataFramc,连接直询结果如图3-26所示。»>df.join=df.join(df2,"name").show()InameIageIcollege)phoneI王二I20信息学院15136665211I张三I21|机械学院15136665212I李四I22|信息学院15136665213j赵六I22|人文学院15136665214图3-26辘查询结果【例3-12使用SCIeCto方法查询college和name字段的数据,如图3-27所示。使用IimitO方法查询前两行数据,如图3-28所示。使用SeleCtEXPrO方法将字段名college修改为school,如图3-29所示。>»df.select=df.select("college","name")>»deselect,show()»>df_Ximit=df.limit(2)+-+»>df_limit.show()I age collegename|Icollegename+-+-+I 20|信息学院I王二II 21|机械学院I张三II信息学院I王二II机械学院I张三II信息学院I李四II人文学院I赵六I+-+图3-27杳询ColIege和name字段的数据图3-28杳询前两行数据»>df.selectExpr=df.selectExpr("name","age","collegeasschool")»>df_selectExpr.show()InameIageIschoolI王二I20信息学院II张三I21机械学院II李四I22信息学院II赵六I22人文学院I图3-29修改字段名【学生】聆听、思考、理解、记录1.查询并统计价格超过500元的各类商品信息和数量【教师】介绍“查询并统计价格超过500元的各类商品信息和数量”的大概流程,安排学生扫描微课二维码观看视频“直询并统计价格超过500元的各类商品信息和数量”(详见教材),并要求学生进行相应操作打开PyCharm,在FaiaFrame”目录下新建,select_price.pyH文件,然后在该文件中编写应用程序,查询商品价格超过500元的商品数量。实现步骤如下。课堂实践步骤I创建SparkSession对象。步骤2A使用read.csv()方法读取"product.csv"文件中的数据创建DataFrame(即df)。其中,header=True表示第一行是列名,inferSchema=True表示自动推断列的类型。步骤3A使用f11ter()方法过滤出df中价格超过500元的商品.(详见教材)【学生】自行扫码观看配套微课,按照要求进行操作,如遇问题可询问老师【教师】巡堂辅导,及时解决学生遇到的问题2.为库存小于50件的商品设置库存预警【教师】介绍“为库存小于50件的商品设置库存预警”的大概流程,安排学生扫描微课二维码观看视频”为库存小于50件的商品设置库存预警和数量”(详见教材),并要求学生进行相应操作打开PyCharm,在"daiaFrame"目录下新建wselect_stock.pyH文件,在该文件中编写应用程序,查询库存小于50件的商品,并提醒超市管理人员需要补货。实现步骤如下.步骤IA创建SparkSession对象。步骤2使用read.csv()方法读取"product.csv"文件中的数据创建DataFrame(即sdf).步骤3A使用dr。PDUPIiCaIeSo方法去除self中重复的数据行,然后使用fillna()方法将sdf中缺失的数值填充为0。(详见教材)【高手点拨】dropDuplicates()是一种数据处理方法,用于去除DataFrame中的重复行。fillna(value,SUbSet)方法用于将DataFrame中的空缺值(null或NaN)替换为指定的值,参数ValUe用于替换空缺值;参数subset(可选)用于指定列名列表,只有在subset中指定的列才会进行填充操作,其他列不受影响,如果没有指定SUbSet,则所有列都会进行填充操作。【学生】自行扫码观看配套微课,按照要求迸行操作,如遇问题可询问老师【教师】巡堂辅导,及时解决学生遇到的问题课堂小结【教师】简要总结本节课的要点DataFrame的数据直询方式DataFrame的数据查询操作【学生】总结回顾知识点作业布置【教师】布置课后作业(1)完成项目三项目实训中与本科相关的习题;(2)根据课堂知识,课后自己尝试DataFrame的数据直询操作,直询符合条件的数据信息。【学生】完成课后任务教学反思