《Spark大数据技术与应用案例教程》教案第20课分析社交网站的用户影响力.docx
课题分析社交网站的用户影响力课时2课时(90min)教学目标知识技能目标:(1)掌握读取数据创建图的方法(2)掌握使用GraphFramc类的属性和图的叫操作方法处理图的方法(3)掌握图的常用算法素质目标:(1)运用图算法处理日常生活中的数据关联性问题。(2)加强自身观察能力,发掘事物之间的关联性。教学重难点教学重点:图的创建、图的数据操作、图的常用算法教学难点:使用图的常用算法解决实际问题教学方法案例分析法、问答法、讨论法、讲授法教学用具电脑、投影仪、多媒体课件、教材教学过程主要教学内容及步骤课前任务【教师】布置课前任务,和学生负责人取得联系,让其提醒同学通过APP或其他学习软件,完成课前任务请大家回顾上一节课所学知识,并了解GraPhFrameS中图的创建方法、操作方法和常用算法。【学生】完成课前任务考勤【教师】使用APP进行签到【学生】班干部报请假人员及原因问题导入【教师】提出以下问题:你知道在GraphFrames中创建图的方法吗?【学生】思考、举手回答传授新知【教师】通过学生的回答引入新知,介绍图的创建、图的数据操作、图的常用算法等知识一、图的创建【教师】介绍GraphFrames中图的创建方法GraphFrame是GraphFrames中的核心相象,用于表示和操作图数据。从逻辑上看,GraphFrame由顶点DataFrame和边DataFrame组成顶点DataFrame必须包含名为id的列,用于存储唯一的顶点IDe边DataFrame必须包含名为src和dst的列,分别用于存储边的源顶点ID和目标顶点IDe在GraphFrames中,创建图的方法有三种:第一种是根据顶点DataFrame和边DataFrame创建图;第二种是根据RDD创建图;第三种是读取文件中的数据创建图。1.根据顶点DataFrame和边DataFramc创建图在GraphFrames中,可以使用GraPhFrame()方法根据顶点DalaFrame和边DalaFrame创建图,该方法的基本格式如下。GraphFrame(v,e)其中,参数V表示保存顶点信息的DataFrame;参数e表示保存边信息的DataFramee【教师】通过例子,帮肋学生掌握根据顶点DataFrame和边DataFrame创建图的方法【例6-1根据顶点DataFrame和边DataFrame创建图。使用GraPhFrame()方法以城市作为顶点,距离作为边创建图,图的顶点信息和边信息如图6-5所示。hadoopbogon$pyspark»>fromgraphframesimportGraphFrarnc建顶点DataFrame,包含顶点的标识符(id)和城市(city)»>vertices=spark.createDataFrame("A","NewYork"),("B","London"),(',C",',Tokyo"),id'"city0)舱J建边DataFrame,包含边的源顶点(Src)、目标顶点(dst)和距离(distance)»>edges=spark.createDataFrame("A","B",55),("B","C",6500),(''C",',A",8000),I,'src'"dst","distance")#根据顶点和边的DataFrame创建图»>graph=GraphFrame(vertices,edges)#显示图的顶点信息»>graph.vertices.show()#显示图的边信息+srcdstdistance)ABl55001BCl6500ClAl8000十÷>» graph. edges. show()»>graph.edges.show()»>graph.vertices.show()+IidIcity+IANewYorkBLondon)ICTokyoI+图的顶点信息和边信息图6-52.根据RDD创建图在GraphFrames中,如果斓存储在RDD中,我们首先需要将RDD转换为DataFrame,然后使用GraPhFrameo方法创建图。【教师】通过例子,帮助学生掌握根据RDD创建图的方法【例6-2根据RDD创建图,输出图的顶点信息和边信息,如图6-6所示。|hadoopbogon-$pyspark»>fromgraphframesimportGraphFrame制建RDD,包含(顶点ID,属性沅组»>rdd=spark.sparkContext.parallelize(l,'A'),(2,'B').(3,rC)# 将RDD转换为DataFrame»>vertices_df=rdd.toDF(,id,"attribute")跄J建RDD,包含(源顶点ID.目标顶点ID,边属性)元组»>edges_rdd=spark.sparkContexl.parallelize(1,2,edge).(2,3.,edge2,)# 将RDD转换为DataFrame»>edges-df=edges_rdd.toDF("src","dst","relationship")# 使用GraPhFrame()方法创建图»> graph.vertces.show()»> graph.edges.show()»> graph, vertices, show() +I idattribute) +I1|AlI2BlI3Cl»>graph=GraPhFrame(VertiCeS_df,edges_df)»>graph.edges,show()+Isrcdstrelationship(+I12edgel|23edge2|.图6-6图的顶点信息和边信息3.读取文件中的数据创建图在GraPhFmmeS中,如果数据存储在文件中(如CSV、ParqUel等文件),我们需要先使用SPark读取文件中的数据创建DataFrame,然后使用GraPhFrameo方法创建图。【教师】通过例子,帮助学生掌握通过读取文件中的数据创建图的方法【例6-3读取文件中的数据创建图。新建7usrIOCalsparkmycodegraph”目录,并在该目录下新建两个文本文件。“user.txt”文件用于保存用户信息数据,包含用户ID、姓名和职业3个字段,如图6-7所示。“relationship.txt”文件用于保存用户之间的关系数据,包含两个用户ID和用户之间的关系,如图6-8所示。打开(0)区usertxt保存三X打开9)Iarelati""保存(三)三IXuserlJohnstudentuser2Janepostdocuser3Davidprofessoruserluser2collaboratoruser3user2leaderuser3userladvisor图&7用户信息数据图6-8用户之间的关系数据读取文件中的数据创建DataFrame然后使用GraPhFrameO方法创建图输出图的顶点信息和边信息,如图6-9所示。hadoopbogon$pyspark»>fromgraphframesimportGraphFrame# 读取user.txt文件中的数据创建RDD»>vertices_rdd=spark.sparkContext.textFile("file:/usr/local/spaik/mycode/graph/user.txt").map(lambdaline:line.split("")# 将RDD转换为顶点DataFrame»>vertices_df=spark.createDataFrame(vertices_rdd,"id",',name","profession")# 读取relaiionship.txt文件中的数据创建RDD»>dges_rdd=spark.sparkContext.textFile("file:/usr/local/spark/mycode/graph/relationship.txt").ma(lambdaline:line.split("")# 将RDD转换为边DataFrame»>edges_df=spark.createDataFrame(edges-rdd,"src","dst","relationship")愉建图»>graph=GraPhFrame(VertiCeS_df,edges_df)»>graph.vertices.show()»>graph.edges.show()>>> graph.vertices.show()id I ameprofession)Iuserl John student) Iuser2 Janej postdoc Iuser31Davidj professor»> graph. edges. show()I src dstrelationship!Iuserl user3 I user3+user21 collaborator!user2Ileader)userlIadvisor+图69图的顶点信息和边信息二、图的数据操作【教师】介绍GraPhFrameS中图的数据操作创建图之后,可以对图中的数据进行操作,帮助用户从图中提取有用信息。在GraphFrames中,GraphFrame类包含vertices、edges、triplets、inDegrees、OutDegrees和degrees等属性。这些属性的详细说明如表6-1所示。表6-1GraphFrame类的属性属性说明vertices通过VertiCeS属性,用户可以访问和操作图中的顶点集合edges通过edges属性,用户可以访问和操作图中的边集合triplets通过triplets属性,用户可以访问和操作图中的三元组集合。其中,三元组由起始顶点src、边edge和目标顶点dst组成inDegrees通过inDegrees属性,用户可以进行入度分析和筛选操作OutDegrees通过OUtDegreeS属性,用户可以进行出度分析和筛选操作degrees通过degrees属性,用户可以进行度分析和筛选操作(详见教材)表6-2常用的数据操作方法方法DataFrameGraphFramefilter(condition)使用给定条件筛选DataFrame中的数据根据指定的筛选条件对顶点或边进行筛选filterVertices()filterEdges()杳询符合条件的顶点或边OrderBy(*cols,ascending)按照指定列对数据进行排序按照指定列对顶点或边进行排序groupBy(*cols)按照指定列对DataFrame进行分组按照指定列对顶点或边进行分组withColumn(colName,col)添加新的列或修改现有的列用于映射图的顶点或边,即向顶点或边中添加新的列或修改顶点或