《《Spark大数据技术与应用案例教程》教案第9课查看商品信息.docx》由会员分享,可在线阅读,更多相关《《Spark大数据技术与应用案例教程》教案第9课查看商品信息.docx(10页珍藏版)》请在第壹文秘上搜索。
1、课题查看商品信息课时2课时(90min)教学目标知识技能目标:(1)掌握DataFrame的创建方法(2)掌握DataFrame的数据获取操作素质目标:培养举一反三的能力,学会融会贯通教学重难点教学重点:DataFrame的创建,DataFrame的数据获取操作教学难点:读取数据并创建DataFrame,获取DataFramc的数据教学方法案例分析法、问答法、讨论法、i井授法教学用具电脑、投影仪、多媒体课件、教材教学过程主要教学内容及步骤课前任务【教师】布置课前任务,和学生负责人取得联系,让其提醒同学通过APP或其他学习软件,完成课前任务请大家了解DataFrame的相关知识.【学生】完成课前
2、任务考勤【教师】使用APP进行签到【学生】班干部报请假人员及原因问题导入【教师】提出以下问题:什么是DataFrame?DataFrame与RDD有何区别?【学生】思考、举手回答传授新知【教师】通过学生的回答引入新知一、DataFramc的创建【教师】介绍DataFrame的概念,以及DataFrame与RDD的区别DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表。DataFrame带有Schema元信息,即DataFrame所表示的二维表数据集的每列都带有名称和数据类型。DataFrame与RDD的区别如图3-10所示。如果把数据存放到RDD中,则每个元素都是
3、一个对象(如Person对象),但是对的内部结构对于RDD而言是未知的。如果把雌存放到DataFrame中,则每个元素都被封装为RoW类型,SParkSQL知道对象的内部结构信息,即列数、每列的名称和数据类型。StringIntDoubleStringIntDoubleStringIntDoubleNameAgeHeightStringIntDoubleStringIntDoubleStringIntDoubleRDDIPersonlDataFrame图3-10DataFrame与RDD的区别DataFrame支持从数据文件、外部数据库、Spark计算过程中生成的RDD.Hive表等不同的数据
4、源中读取数据并创建DataFramee【教师】介绍DataFrame的创建方法1 .通过数据文件创建DataFrameSparkSession是SparkSQL提供的一个处理结构化数据的编程接口,它支持从不同的数据源中读取数据并创建DaIaFrame,还支持执行不同的SQL置旬和DataFrame操作等.在开发独立应用程序时,通过SparkSession.builder可以创建一个SparkSession对象,并配置Spark应用程序的相关属性,参考示例如下。frompysparkimportSparkContext5SparkConffrompyspark.sqlimportSparkSes
5、sionspark=SparkSession.buiIder.appName(MyApp,).getOrCreate()builder是SparkSession的一个构造器,其常用方法及说明如表3-1所示。表3-1builder的常用方法及说明方法说明appName(name)为应用程序设置一个名称,该名称将在SparkWebUI中显示。参数name为应用程序的名称master(master)设置Spark连接的主节点URL,如“local”表示本地运行、“spaik:/master:7077,表示在Spark独立集群上运行。参数master为Spark主节点的URLconfig(key,va
6、lue,conD设置一个配置选项,使用该方法设置的选项会自动传到SparkConf和SparkSession的配置中。参数key(可选)为配置属性的键名;参数value(可选)为配置属性的值;参数conf(可选)为SparkConf的实例enableHiveSupport()启用Hive支持,包括连接到持久的Hive元存储,支持HiveSerDes和Hive用户定义函数getOrCreate()获取一个现有的SparkSession,如果不存在,则会基于此构建器中设置的选项创建一个新的SparkSession通过数据文件创建DataFrame时,使用SparkSession对象的read属性获
7、取SparkSQL中的外部数据源访问对象DataFrameReader后,可以直接使用DataFrameReader对象的text()Njson()sCSVO或parquet()方法读取不同文件中的数据创建DataFrame;也可以使用DataFrameReader对象的format。方法指定输入数据源的格式,接着使用该对象的load()方法读取数据源中的数据创建DataFramee参考示例如下。#1卖取文本文件中的数据创建DataFramespark.read.text(people.txt)spark.read.formai(text).load(people.txt)卖取JSON文件中的
8、健创建DataFrame#方法一#方法二spark.read.json(people.json)#方法一spark.read.fonat(json).load(people.json)#读取CSV文件中的数据创建DataFrame#方法二spark.read.csv(people.csv)#方法一spark.read.format(csv).load(people.csv)僦取Parquet文件中的数据创建DataFrame#方法二SPark.read.parquei(people.parqueT)spark.read.fbat(parquet).load(people.parquet)#方法
9、一#方法二【高手点拨】SparkSQL的默认数据格式是Parquet.Parquet文件由多个行组(rowgroup)组成,每个行组包含多个列块(columnchunk),每个列块都独立地进行压缩和编码,以提供更好的读写性能.ParqUet文件用于高效地存储和处理大规模投艇.【教师】通过例子,帮助学生掌握通过数据文件创建DataFrame的方法【例3-1,7usr/local/spark/mycode/output.jsonM文件的内容如图3-11所示。读取该文件中的数据创建DataFrame(即df),然后使用ShoWo方法显示df中的数据,如图3-12所示.hadoopbogon$pysp
10、ark#读取数据创建DataFramedf=spark.read.json(fileusrlocalsparkmycodeoutput.json,)#显示DataFrame中的数据df.show()I打开一阿方梵黑I保存月df.show()+IageIname+I25AliceI30BobI351Charliel图3-12显示df中的数据【小提示】启动pyspark交互式执行环境后,pyspark会默认提供一个SparkContext对象(名为SC)和一个SparkSession对象(名为spak),无需手动创建。2 .通过外部数据库创建DataFrame在SparkSQL中,通过外部数据库创
11、建DataFrame时需要通过Java数据库互连(JaVadatabaseconnectivity.JDBC)或开放式库互连(OPendatabaseconnectivity,ODBC)的方式访问数据库。通过外部数据库创建DataFrame的方法是使用SparkSession对象的read属性获取DataFrameReader对象后,可以直接使用DataFrameReader对象的jdbc()方法从外部数据库中读取数据创建DataFrame;也可以先使用DaIaFrameReader对象的fomal()方法指定访问外部数据源的方式,接着使用OPtiOnO方法配置连接外部数据源的选项,最后使用I
12、oadO方法读取数据创建DataFramee参考示例如下。#方法一spark.read.jdbc(url,table,properties)#方法二df=spark.read.format(jdbc).option(driver,com.mysql.jdbc.Driver).option(,url,jdbc:mysql:/hostname:pori/database).option(dbtable,table_name).option(user,usemame).option(password,password).load()【教师】通过例子,帮助学生掌握通过外部数据库创建DataFrame的
13、方法【例3-2通过MySQL数据库创建DataFramee创建数据库spark;然后在该数据库中创建一个student表,表中包含姓名(name),年龄(age)和学院(college)字段;接着在student表中插入两条数据;最后查询student表的所有数据,如图3-13所示。|hadoopbogon-!$mysql-uroot-p跄J建幡库SParkmysqlcreatedatabasespark;mysqlusespark;怆J建一个student表mysqlcreatetablestudent(namechar(30),ageint,collegechar(40);#在studen
14、t表中插入两条mysqlinsertintostudentVaIUeS(Alice:20.艺术学院);mysqlinsertintostudentvalues(Bob,I8,会计学院);楂询student表的所有降mysqlselect*fromstudent;mysqlquit;mysqlselect*fromstudent;+Inameagecollege+IAliceI20I艺术学院I1 BobI18I会计学院I+2 rowsinset(0.00sec)图3-13student表的数据读取MySQL数据库spark中studeni表的数据创建DaiaFramee首先,使用formal。方法指定访问MySQL嫡库的方式为jdbc.然后,使用多个OPtion()方法配置选项,设置JDBC驱动程序的类名,因为在建立JDBC连接之前需要加载相应的驱动程序;设置MySQL的Url的地址和端口,告诉Spark程序连接的MySQL数据库的名称,以及数据库连接的相关信息;指定读取数据的表名、MySQL数据库的账户名称和密码。最后,使用IOado方法读取数据创建DataFram