《Spark大数据技术与应用案例教程》教案第20课分析社交网站的用户影响力.docx

上传人:夺命阿水 文档编号:1242642 上传时间:2024-04-12 格式:DOCX 页数:12 大小:95.48KB
返回 下载 相关 举报
《Spark大数据技术与应用案例教程》教案第20课分析社交网站的用户影响力.docx_第1页
第1页 / 共12页
《Spark大数据技术与应用案例教程》教案第20课分析社交网站的用户影响力.docx_第2页
第2页 / 共12页
《Spark大数据技术与应用案例教程》教案第20课分析社交网站的用户影响力.docx_第3页
第3页 / 共12页
《Spark大数据技术与应用案例教程》教案第20课分析社交网站的用户影响力.docx_第4页
第4页 / 共12页
《Spark大数据技术与应用案例教程》教案第20课分析社交网站的用户影响力.docx_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《《Spark大数据技术与应用案例教程》教案第20课分析社交网站的用户影响力.docx》由会员分享,可在线阅读,更多相关《《Spark大数据技术与应用案例教程》教案第20课分析社交网站的用户影响力.docx(12页珍藏版)》请在课桌文档上搜索。

1、课题分析社交网站的用户影响力课时2课时(90min)教学目标知识技能目标:(1)掌握读取数据创建图的方法(2)掌握使用GraphFramc类的属性和图的叫操作方法处理图的方法(3)掌握图的常用算法素质目标:(1)运用图算法处理日常生活中的数据关联性问题。(2)加强自身观察能力,发掘事物之间的关联性。教学重难点教学重点:图的创建、图的数据操作、图的常用算法教学难点:使用图的常用算法解决实际问题教学方法案例分析法、问答法、讨论法、讲授法教学用具电脑、投影仪、多媒体课件、教材教学过程主要教学内容及步骤课前任务【教师】布置课前任务,和学生负责人取得联系,让其提醒同学通过APP或其他学习软件,完成课前任

2、务请大家回顾上一节课所学知识,并了解GraPhFrameS中图的创建方法、操作方法和常用算法。【学生】完成课前任务考勤【教师】使用APP进行签到【学生】班干部报请假人员及原因问题导入【教师】提出以下问题:你知道在GraphFrames中创建图的方法吗?【学生】思考、举手回答传授新知【教师】通过学生的回答引入新知,介绍图的创建、图的数据操作、图的常用算法等知识一、图的创建【教师】介绍GraphFrames中图的创建方法GraphFrame是GraphFrames中的核心相象,用于表示和操作图数据。从逻辑上看,GraphFrame由顶点DataFrame和边DataFrame组成顶点DataFra

3、me必须包含名为id的列,用于存储唯一的顶点IDe边DataFrame必须包含名为src和dst的列,分别用于存储边的源顶点ID和目标顶点IDe在GraphFrames中,创建图的方法有三种:第一种是根据顶点DataFrame和边DataFrame创建图;第二种是根据RDD创建图;第三种是读取文件中的数据创建图。1.根据顶点DataFrame和边DataFramc创建图在GraphFrames中,可以使用GraPhFrame()方法根据顶点DalaFrame和边DalaFrame创建图,该方法的基本格式如下。GraphFrame(v,e)其中,参数V表示保存顶点信息的DataFrame;参数e

4、表示保存边信息的DataFramee【教师】通过例子,帮肋学生掌握根据顶点DataFrame和边DataFrame创建图的方法【例6-1根据顶点DataFrame和边DataFrame创建图。使用GraPhFrame()方法以城市作为顶点,距离作为边创建图,图的顶点信息和边信息如图6-5所示。hadoopbogon$pysparkfromgraphframesimportGraphFrarnc建顶点DataFrame,包含顶点的标识符(id)和城市(city)vertices=spark.createDataFrame(A,NewYork),(B,London),(,C,Tokyo),idci

5、ty0)舱J建边DataFrame,包含边的源顶点(Src)、目标顶点(dst)和距离(distance)edges=spark.createDataFrame(A,B,55),(B,C,6500),(C,A,8000),I,srcdst,distance)#根据顶点和边的DataFrame创建图graph=GraphFrame(vertices,edges)#显示图的顶点信息graph.vertices.show()#显示图的边信息+srcdstdistance)ABl55001BCl6500ClAl8000十 graph. edges. show()graph.edges.show()gr

6、aph.vertices.show()+IidIcity+IANewYorkBLondon)ICTokyoI+图的顶点信息和边信息图6-52.根据RDD创建图在GraphFrames中,如果斓存储在RDD中,我们首先需要将RDD转换为DataFrame,然后使用GraPhFrameo方法创建图。【教师】通过例子,帮助学生掌握根据RDD创建图的方法【例6-2根据RDD创建图,输出图的顶点信息和边信息,如图6-6所示。|hadoopbogon-$pysparkfromgraphframesimportGraphFrame制建RDD,包含(顶点ID,属性沅组rdd=spark.sparkContex

7、t.parallelize(l,A),(2,B).(3,rC)# 将RDD转换为DataFramevertices_df=rdd.toDF(,id,attribute)跄J建RDD,包含(源顶点ID.目标顶点ID,边属性)元组edges_rdd=spark.sparkContexl.parallelize(1,2,edge).(2,3.,edge2,)# 将RDD转换为DataFrameedges-df=edges_rdd.toDF(src,dst,relationship)# 使用GraPhFrame()方法创建图 graph.vertces.show() graph.edges.show(

8、) graph, vertices, show() +I idattribute) +I1|AlI2BlI3Clgraph=GraPhFrame(VertiCeS_df,edges_df)graph.edges,show()+Isrcdstrelationship(+I12edgel|23edge2|.图6-6图的顶点信息和边信息3.读取文件中的数据创建图在GraPhFmmeS中,如果数据存储在文件中(如CSV、ParqUel等文件),我们需要先使用SPark读取文件中的数据创建DataFrame,然后使用GraPhFrameo方法创建图。【教师】通过例子,帮助学生掌握通过读取文件中的数据创建

9、图的方法【例6-3读取文件中的数据创建图。新建7usrIOCalsparkmycodegraph”目录,并在该目录下新建两个文本文件。“user.txt”文件用于保存用户信息数据,包含用户ID、姓名和职业3个字段,如图6-7所示。“relationship.txt”文件用于保存用户之间的关系数据,包含两个用户ID和用户之间的关系,如图6-8所示。打开(0)区usertxt保存三X打开9)Iarelati保存(三)三IXuserlJohnstudentuser2Janepostdocuser3Davidprofessoruserluser2collaboratoruser3user2leader

10、user3userladvisor图&7用户信息数据图6-8用户之间的关系数据读取文件中的数据创建DataFrame然后使用GraPhFrameO方法创建图输出图的顶点信息和边信息,如图6-9所示。hadoopbogon$pysparkfromgraphframesimportGraphFrame# 读取user.txt文件中的数据创建RDDvertices_rdd=spark.sparkContext.textFile(file:/usr/local/spaik/mycode/graph/user.txt).map(lambdaline:line.split()# 将RDD转换为顶点Data

11、Framevertices_df=spark.createDataFrame(vertices_rdd,id,name,profession)# 读取relaiionship.txt文件中的数据创建RDDdges_rdd=spark.sparkContext.textFile(file:/usr/local/spark/mycode/graph/relationship.txt).ma(lambdaline:line.split()# 将RDD转换为边DataFrameedges_df=spark.createDataFrame(edges-rdd,src,dst,relationship)愉

12、建图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图

13、的顶点信息和边信息二、图的数据操作【教师】介绍GraPhFrameS中图的数据操作创建图之后,可以对图中的数据进行操作,帮助用户从图中提取有用信息。在GraphFrames中,GraphFrame类包含vertices、edges、triplets、inDegrees、OutDegrees和degrees等属性。这些属性的详细说明如表6-1所示。表6-1GraphFrame类的属性属性说明vertices通过VertiCeS属性,用户可以访问和操作图中的顶点集合edges通过edges属性,用户可以访问和操作图中的边集合triplets通过triplets属性,用户可以访问和操作图中的三元组集

14、合。其中,三元组由起始顶点src、边edge和目标顶点dst组成inDegrees通过inDegrees属性,用户可以进行入度分析和筛选操作OutDegrees通过OUtDegreeS属性,用户可以进行出度分析和筛选操作degrees通过degrees属性,用户可以进行度分析和筛选操作(详见教材)表6-2常用的数据操作方法方法DataFrameGraphFramefilter(condition)使用给定条件筛选DataFrame中的数据根据指定的筛选条件对顶点或边进行筛选filterVertices()filterEdges()杳询符合条件的顶点或边OrderBy(*cols,ascendi

15、ng)按照指定列对数据进行排序按照指定列对顶点或边进行排序groupBy(*cols)按照指定列对DataFrame进行分组按照指定列对顶点或边进行分组withColumn(colName,col)添加新的列或修改现有的列用于映射图的顶点或边,即向顶点或边中添加新的列或修改顶点或边中现有的列WithCOlUmnRenamed(existing,new)修改DataFrame中的列名修改顶点或边中的列名select(*cols)查询指定字段的数据信息查询顶点或边中指定字段的数据信息selectExpr(*expr)在DataFrame上执行复杂的表达式和聚合操作在顶点或边上执行复杂的表达式和聚合

16、操作union(other)合并两个DataFrame合并两个图的顶点或边join(other,on,how)使用给定的连接表达式与另一个DaIaFrame进行连接使用给定的连接表达式连接两个图的顶点或边【教师】通过例子,帮助学生掌握GraPhFrameS中图的数据操作【例6-4查询顶点和边的信息。对例6-3创建的图graph执行数据操作,首先使用vertices属性,查询顶点信息、顶点个数和职业为student的顶点信息;然后使用edges属性,/询边信息;最后使用triplets属性,查询三元组信息。数据操作的代码和输出结果如图6-10所示。IgraPh.vertices.ShoW()1查

17、询图的顶点信息+IidInameprofession)userlJohnstudentIuser2JanepostdocIuser3Davidprofessor)IgraPh.vertices,count()0查询顶点个数graph.vertices.filter(graph.vertices.profession=student).show()+Iidnameprofession)I查询职业属性为Student的顶点信息IuserlJohstudent.graph.edges,show()查询图的边信息Isrcdstrelationship)Iuserluser2collaborator!I

18、user3Iuser2IeaderjIuser3userladvisor查询图的三元组信息IgraPh.triplets.ShoW(trunCatC=FalSe)IIsrcIedgeIdstIuserl,John,studentuserl,user2,collaboratoruser2,Jane,Iuser3,David,professor)user3,user2,leaderuser2,Jane,Iuser3,David,professoruser3,userl,advisor(userllJohn,+postdoc)IpostdocIstudent(图6-10查询图的各项信息【例6-5查询

19、每个顶点的出度值、入度值和度数值。对例6-3创建的图graph执行数据操作,分别使用OUtDegrees、indegrees和degrees属性,直询每个顶点的出度值、入度值和度数值。数据操作的代码和输出结果如图6-11所示。graph.outDegrees.show()graph.inDegrees.show()graph.degrees.show()IidIdegreeIuserlI2user32user22每个顶点的度数值IidIoutDegree+IuserlI1Iuser32IidIinDegreeI+Iuserl11Iuser2121+每个顶点的入度值每个顶点的出度值【高手点拨】入

20、度值表示以当前顶点为起始点的边的数量;出度值表示以当前顶点为目标顶点的边的数量;度数值为入度值和出度值的和。【例6-6计算每个分组内顶点的数量。对例6-3创建的图graph执行数据操作使用groupBy()方法按照profession列对顶点进彳亍分组,并计算每介分组内顶点的数量。数据操作的代码和输出结果如图6-12所示。graph.vertices.groupBy(profession).count().show().-Iprofession)countI-.IprofessorIlstudent)1IpostdocI1+图6/2每个分组内顶点的数量【例6-7提取子图。对例6-3创建的图gr

21、aph执行数据操作分别使用filterVerticesO方法和filter()方法提取姓名为John的顶点。数据操作的代码和输出结果如图6-13所示。graph.filterVertices(name=hn,l,).vertices,show()+-+Iidnameprofession!方法一:助蚁顿政0方法IuserlIJohn student|方法二:filter。方法lfilter_vertices_df=qraph.vertices,filter(name=John”GraphFrame(filter_vertices_df,graph.edges).vertices.show()id

22、InameIprofession)IuserlIJohnstudent图6-13提取子图【小提示】使用GraphFrames的提供的方法如FilterVertiCeS()执行数据操作后,返回一个新的图。使用DataFrame提供的方法执行数据操作后,返回一个新的DataFramez需要使用GraPhFrame()方法重新创建图才能得到图数据。【例6-8映射顶点。对例6-3创建的图graph执行数据操作,使用WithCOlUmn()方法将name列的数据均转换为大写并将新的列名设置为new-property数据操作的代码和输出结果如图6-14所示。frompyspark.sql.function

23、simportcol,uppertransformed.vertices.df三graph.vertices.withColumn(new.property,UPPer(Col(name).show()+.-+IidInameprofession)new.property+-+-+IuserlJohnstudent)JOHNIuser21JanejpostdocjJANEIuser31DavidIprofessor)DAVID图6-14映射顶点【例6-9顶点连接。对例63创建的图graph执行数据操作,使用join()方法根据共同的列id将两个图的顶点进行连接。数据操作的代码和输出结果如图6-

24、15所示。second.vertices,data=(userl,1),(,user2,1,2),.second_vertices_df=spark.createDataFrame(second,vertices_data,id,label)graph.vertices.join(second_vertices_df,id).show()+-+Iidameprofessionlabel+-+IuserlIJohnstudent|1|Iuser2Janepostdoc|2|图6-15顶点连接【教师】提出任务请使用Uniono方法实现例6-9的顶点连接功能。【学生】按照要求进行操作三、图的常用算法

25、【教师】介绍GraPhFrameS中图的常用算法GraphFrames提供了一些高级的图算法和图处理工具,使用户能够在分布式环境中进行图分析。图的常用算法包括PageRankxLabelPropagation和ShortestPaihs等。1.PageRank算法PageRank算法又称网页排名算法,该算法的核心思想是通过分析网页之间的链接关系,为每个网页分配一个权重值,表示其在整个网络中的重要性.PageRank算法主要基于两个重要的假设。数量假设:如果一个网页被越多的网页链接到,那么该网页越重要。质量假设:质量高的网页会通过链接向其他网页传递更大的权重。PageRank算法的应用范围从最初

26、的网页排名问题延伸到更广泛的图计算领域,该算法可以帮助我们发现重要顶点、了解顶点之间的关系、预测网络演化趋势等。PageRank算法的基本格式如下。pageRank(resetProbability,source!D,maxller,tol)其中,参数的含义如下。(1)resetProbability(可选):表示重置到随机顶点的概率,默认值为0.15.(2)SourceID(可选):表示个性化PageRank的源顶点。如果不指定该参数,则默认选择图中的一个顶点作为起始点.(3)maxher(可选):表示算法执行的最大迭代次数。如果设置了IoI参数,则不能设置该参数。(4)(可选):表示迭代收

27、敛误差容差,默认值为0.01。如果设置了maxlter参数,则不能设置该参数。PageRank算法的返回值是一个GraphFrame,其中顶点DataFrame中新增的pagerank列存储每个顶点对应的PageRank值;边DataFrame中新增的weight列存储边的权重。【教师】通过例子,帮助学生掌握PageRank算法的应用【例6-10评估每个顶点的重要性。创建图,并使用PageRank算法计算每个顶点的PageRank值,输出结果如图6-16所示。根据结果可以看出,顶点ID为C的PageRank值最大,即该顶点在图中最重要。hadoop(3)bogon$pysparkfromgra

28、phframesimportGraphFrame舱0建顶点DataFramenodes=spark.createDataFrame(A,userl),(B,user2),(C,user3),(D,user4),id,name)舱0建边DataFrameedges=spark.createDataFrame(A,B),(B,C,),(C,An),(D,C),src,dst,)舱)建图graph=GraphFrame(nodes,edges)#计算PageRank值pagerank=graph.ageRank(resetProbability=0.15,maxler=l)#显示每个顶点的PageR

29、ank值pagerank.vertices.show()pagerank,vertices,show().IidInameIpagerank+IBuser21.1834337192862303Duser410.150000000000000051Cuser31.4507619050829101Auserl1.2158043756308592图6-16每个顶点的PageRank值2 .LabelPropagation算法UbelPr。Pagation算法又称标签传播算法,是一种处理图数据的半监督学习方法。该算法通过在相邻顶点之间传播标签,推断图中顶点的标签,以便将同一社区内的顶点赋予相同的标签。

30、LabelPropagation算法基于一个假设,即在图结构中相邻的顶点更有可能具有相似的特征和属性。1.abelPropagation算法的基本格式如下。labelPropagation(maxIter).(详见教材)【教师】通过例子,帮助学生掌握LabelPropagation算法的应用【例6-11分析用户所属的社区。创建图,并使用LabelPropagation算法分析用户所属的社区,输出结果如图6-17所示。根据结果可以看出,顶点ID为C、A的用户属于同一社区。hadoopbogon-$pysparkfromgraphframesimportGraphFrame# 创建顶点DataFr

31、amevertices=spark.createDataFrame(AAlice),(B,Bob),(C,Charlie).(,D,David),(ELEsiher),(,F,Fanny),id,name)将创建边DataFrameedges=SPark.CreaieDaiaFrame”(Ao,B),(B,C,),(C,A),(DE),(E,Dr),(Eh,Fm),(F,Er)h,src,dst,J)#创建图graph=GraphFrame(vertices,edges)# 分析用户所属的社区result=graph.labelPropagation(maxIter=20)# 显示用户所属的社

32、区result.show()result,show()+IidInameIlabel+IFFanny171798691840EEsther369367187456BBob420906795008DDavid171798691840CCharlie420906795008IAAlice420906795008+图6-17不同用户所属的社区3 .ShortestPaths算法ShortestPalhS算法又称最短路径算法,它用于寻找两个顶点之间的最短路径,即在连接两个顶点的所有路径中,找到边数最少或权重最小的路径。ShortestPaths算法的基本格式如下。ShortestPaths(Iandm

33、arks)其中,参数IandmarkS表示一个或多个目标顶点的集合。ShortestPaths算法的返回值是一个DataFrame,其中新增的distances列用于存储图中所有顶点到指定目标顶点的最短路径长度。【教师】通过例子,帮助学生掌握ShOrteStPathS算法的应用【例6-12计算图中所有顶点到指定目标顶点的最短路径长度。创建图,并使用ShortestPaths算法计算所有顶点到目标顶点E的最短路径长度,输出结果如图6-18所示。hadoop(3bogon$pysparkfromgraphframesimportGraphFrame# 创建顶点DataFramevertices=s

34、park.createDataFrame(A,Alice),(B,Bob),(C,Charlie),(D,David),(EEvew),(F,Frank)1.id,name,J)# 0建边DataFrameedges=spark.createDataFrame(Ah,B,2),(A,C,4),(B,C,1),(B,D,5),(C,D,8),(D,Eh,3),(E,F,6),(F,C7).src,dst,weigh,)#创建图graph=GraphFrame(vertices,edges)# 计算所有顶点到目标顶点E的最短路径长度result=graph.shortestPaths(landma

35、rks=E)# 显示所有顶点到目标顶点E的最短路径长度result.show(truncate=False)+lidInameIdistancesl+IFIFrank-E-3IIEIEveKE-IIBIBobHE-2IIDIDavidHE-1IICICharlieIK-2IIAIAliceHE-3I+-+图6-18所有顶点到目标顶点E的最短路径长度【学生】聆听、思考、理解、记录课堂实践【教师】介绍“配置分析社交网站的用户影响力”的大概,安排学生扫描微课二维码观看视频“分析社交网站的用户影响力”(详见教材),并要求学生进行相应操作统计社交网站中最具影响力的用户时,首先需要创建图;然后获取每位用户

36、的影响力得分和粉丝数;接着对该得分进行排序;最后获取排名第一的用户即为最具影响力用户。现有社交网站用户关系数据文件7usrIoCalsparkmycodegraphgraph-data.txt,该文件记录了某个时间节点下的用户关系。该文件中的每条数据包含两个用户名和用户编号,且第二个用户是第一个用户的粉丝,如图6-19所示。打开9)区graph-data.txtusrocalsparfcmycode/graph保存(三)三(User47,8656651),(User83,15647839)-(User47,86566510)f(User42,197134784)(User89,74286565

37、),(User49,19315174)(Userl6,22679419),(User69,45705189)(User37,1455957),(User64,247424)(User31,63644892)r(Userl,1234655)(Userl,12304655),(User50,17613979)(USer37,1455957。),(Userll.14269220)图6-19社交网站用户关系数据文件中的内容(部分)打开PyCharm,新建graph目录,在该目录下新建SocialNetworkpy”文件,然后在该文件中编写应用程序,统计出最具影响力的用户及该用户的粉丝数。实现步骤如下。

38、步骤1创建SpaikSession对象。步骤2A使用textFile()方法读取社交网站用户关系数据创建RDD(即data_rdd)。步骤3A将daia.rdd转换为DaiaFrame(即data_df)首先使用map()方法去除字符串两端的空白字符、括号字符,并分割数据;然后使用toDF()方法将分割好的数据转换为DataFrame,并指定列名为src-usemame,src_id,dst-username,dst-id)(详见教材)【参考代码】frompyspark.sqlimportSparkSessionfromgraphframesimportGraphFramefrompyspar

39、k.sql.functionsimportdesc,litJ建SparkSession对象spark=SparkSession.builder.appName(SocialNetwork).get!Create()# 读取用户关系数据创建RDDdata-file=file:/usr/local/spark/mycode/graph/graph-lata.txtdata_rdd=spark.sparkContext.textFile(data-file)# 将RDD转换为DataFramedata_df=data_rdd.map(lambdaline:line.strip().replaCe(O

40、.replace。),).split(,).toDF(src_username,src_id,dst_username,dst_id)哈J建顶点DaiaFrameVertiCeS=data_df.seleclEXPreSrJidasid,src_usemameasusemame).union(data_df.selectExpr(dsi_idasid.dst_usemameasusername,).distinct()怆J建边DaiaFrameedges=data_df.selectExpr(src_idassrc,dst_idasdst).withColumn(relationshipM,l

41、it(follow)跄J建图graph=GraphFrame(vertices,edges)# 显示图中的顶点信息graph.vertices.show()# 显示图中的边信息graph.edges.show()# 计算每位用户的影响力得分pagerank-df=graph.pageRank(resetProbability=0.15,maxlter=l)娥计国姗户的粉丝数userdata=graph.inDegrees.withColumnRenamed(inDegree,followerscount)# 1里接USeJdata和pagerank-dfuser_data=user_data.

42、join(pagerank_df.vertices,on=id)# 显示每位用户的相关信息USejdata.show。# 获取最具影响力的用户most_influential_user=user_data.orderBy(desc(pagerank).first()# 输出最具影响力用户的用户名和粉丝数print(MostInfluentialUser:,most_influential_userusername)print(FollowersCount:,most_inttuential_userfbllovers_count)【运行结果】在PyCharm中运行代码,控制台输出图的顶点信息、图的边信息、每位用户的相关信息,以及最具影响力用户的用户名和粉丝数,如图6-20所示。IIdlusernaaelI29758446User68I638271921User2I172318ser21lI165474111User6lI1426922IUserlllI121152USer34II15919138US75I1176O242User86I18396795IUser24I247416851USr87lI15913lUserMlI154344321User9I1649781ISrl3lI2397258User25l245487159U

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号