Hadoop+Spark大数据技术 实验11 Spark 图

17周期末考试 

重点从第五章 scala语言开始

比如:映射(匿名函数)

dcc2854a71cd438386e9792fcb07ecfb.png

11.3.1创建属性图

import org.apache.spark.graphx._
import org.apache.spark.rdd.RDD
//创建一个顶点集的RDD
val users: RDD[(VertexId ,(String,String))] = sc.parallelize(Array((3L,("rxin","student")),(7L,("jgonzal","postdoc")),(5L,("franklin","prof")),(2L,("istoica","prof")),))//创建一个边集的RDD
val relationships:RDD[Edge[String]] = sc.parallelize(Array(Edge(3L,7L,"collab"),Edge(5L,3L,"advisor"),Edge(2L,5L,"colleague"),Edge(5L,7L,"pi"),
))//定义边中用户缺失时的默认(缺失)用户,
val defaultuser = ("John Doe" , "Missing")//使用users和relationships两个RDD实例化Graph类建立一个Graph对象
val graph = Graph(users, relationships , defaultuser)//查看图的顶点信息
graph.vertices.collect.foreach(println)graph.edges.collect.foreach(println)

c24c855420cd43e0af4499e5a83f122d.png

11.3.2使用边集合的RDD创建属性图

//读取本地文件创建属性图
val recordRDD: RDD[String] = sc.textFile("edges .txt")val EdgeRDD = recordRDD.map{x =>val fields = x.split(" ");Edge(fields(0).toLong, fields(1).toLong, fields(2))
}//使用EdgeRDD实例化Graph类建立一个Graph对象
val graphInfo = Graph.fromEdges(EdgeRDD,"VerDefaultAttr")//查看属性图的顶点信息
graphInfo.vertices.collect.foreach(println)//查看属性图的边信息
graphInfo.edges.collect.foreach(println)

b681716f0bf545d9977d1e1c6fae7186.png

 11.3.3使用边的两个顶点的ID所组成的二元组RDD创建属性图
 

val recordRDD: RDD[String] = sc.textFile("edges.txt")//创建源点ID和目的点ID二元组集合的RDD
val EdgeTupleRDD = recordRDD.map{x=> val fields = x.split("");(fields(0).toLong,fields(1).toLong)
}//使用EdgeTupleRDD实例化Graph类建立一个Graph对象
val graph_fromEdgeTuples = Graph.fromEdgeTuples(EdgeTupleRDD,168L)graph_fromEdgeTuples.vertices.collect.foreach(println)graph_fromEdgeTuples.edges.collect.foreach(println)

 5451042714cc4f919d3a7ed05a615a27.png

11.4属性图操作

import org.apache.spark.graphx._
import org.apache.spark.rdd.RDD//创建一个顶点集的RDD,VertexId是Long 类型数据,顶点属性是二元组
val users:RDD[(VertexId,(String, Int))]=sc.parallelize(Array((1L,("非菲",22)),(2L,("乔乔",17)),(3L,("王强",19)),(4L,("王刚",21)),(5L,("李倩",20)),(6L,("林锋",25))
))//创建一个边集的RDD
val relationships: RDD[Edge[Int]] = sc.parallelize(Array(Edge(1L, 3L, 15),Edge(2L, 1L, 10),Edge(2L, 3L, 21), Edge(2L, 4L, 22), Edge(3L, 6L, 10), Edge(4L, 5L, 17),Edge(5L, 6L, 20)
))//定义边中用户缺失时的默认(缺失)用户
val defaultUser =("某某",18)//使用users 和relationships 两个RDD实例化Graph 类,建立一个Graph 对象
val userGraph = Graph(users,relationships,defaultUser)

11.4.1图的属性操作

下面通过图的属性获取属性图的边的数量、居性图的顶点的数量、属性图的所有顶点的入度、属性图的所有顶点的出度,以及属性图的所有项点的入度与出度之和。

1.获取属性图的边的数量
使用属性图对象的numEdges 属性返回属性图的边的数量,返回值类型为Long。

//获取属性图的边的数量
scala> userGraph.numEdges
resl: Long = 7

 2.获取属性图的顶点的数量

使用属性图对象的mumVertices 属性返回属性图的顶点的数量,返回值类型为Long

scala> userGraph.numVertices

res2:Long = 6//获取顶点的数量

3.获取属性图的所有顶点的人度

使用属性图对象的inDegrees 属性返回属性图的所有顶点的人度,返回值类型为

VertexRDD[Int]。

scala> userGraph.inDegrees.collect.foreach(println)//输出所有顶点的人度

4.获取属性图的所有顶点的出度

使用属性图对象的outDegrees 属性返回属性图的所有顶点的出度,返回值类型为

VertexRDD[Int]。

scala> userGraph.outDegrees.collect.foreach(println)//输出所有顶点的出度

5.获取属性图的所有顶点的入度与出度之和

使用属性图对象的degrees属性返回属性图的所有顶点的入度与出度之和,返回值类型

为VertexRDD[Int]。

scala> userGraph.degrees.collect.foreach(x=>print(x+","))//输出所有顶点的入度和出度之和

(4,2),(1,2),(6,2),(3,3),(5,2),(2,3),

11.4.2图的视图操作

1.顶点视图

//输出所有顶点
userGraph.vertices.collect.foreach(println)
(4,(王刚,21)) (1,(非菲,22)) (5,(李倩,20)) (6,(林锋,25)) (2,(乔乔,17)) (3,(王强,19))

 

//case模式匹配

userGraph.vertices.map{

case(id,(name,age)) =>

(age,name)

}.collect.foreach(println)

(21,王刚)
(22,非菲)
(20,李倩)
(25,林锋)
(17,乔乔)
(19,王强)

 

//过滤

userGraph.vertices.filter{

case(id,(name,age)) =>

age<20

}.collect.foreach(println)

(2,(乔乔,17))
(3,(王强,19))

Selection deleted

 

//元组索引查看顶点信息

userGraph.vertices.map{

v => ("姓名:" + v._2._1,

"年龄:" + v._2._2,

"ID:" + v._1)

}.collect.foreach(println)

(姓名:王刚,年龄:21,ID:4)
(姓名:非菲,年龄:22,ID:1)
(姓名:李倩,年龄:20,ID:5)
(姓名:林锋,年龄:25,ID:6)
(姓名:乔乔,年龄:17,ID:2)
(姓名:王强,年龄:19,ID:3)

2.边视图

//查看所有信息
userGraph.edges.collect.foreach(println) 

Edge(1,3,15)
Edge(2,1,10)
Edge(2,3,21)
Edge(2,4,22)
Edge(3,6,10)
Edge(4,5,17)
Edge(5,6,20)

//过滤

userGraph.edges.filter{

case Edge(src,dst,attr) =>

src > dst

}.collect.foreach(println)

Edge(2,1,10)

//索引查看

userGraph.edges.map{

v => ("源点ID:" + v.srcId,

",目的点ID:" + v.dstId,

",边属性:" + v.attr)

}.collect.foreach(println)

(源点ID:1,,目的点ID:3,,边属性:15)
(源点ID:2,,目的点ID:1,,边属性:10)
(源点ID:2,,目的点ID:3,,边属性:21)
(源点ID:2,,目的点ID:4,,边属性:22)
(源点ID:3,,目的点ID:6,,边属性:10)
(源点ID:4,,目的点ID:5,,边属性:17)
(源点ID:5,,目的点ID:6,,边属性:20)

3.边点三元组视图

//直接查看顶点,边信息

userGraph.triplets.collect.foreach(println) 

实训项目:《平凡的世界》中部分人物关系图分析

  1. 开发本地项目

创建Idea项目(方法见实验8)

下载第三方库GraphStream和BreezeViz,解压GraphStream中的core和ui压缩文件中所有的文件,包括其中所有的包

建立stylesheet.css

代码:P251

  1. 使用sbt项目完成(可选

build.sbt的参考内容如下:

name := "P251"version := "0.1"scalaVersion := "2.11.12"libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.5"libraryDependencies += "org.apache.spark" %% "spark-graphx" % "2.4.5"// Graph Visualization// https://mvnrepository.com/artifact/org.graphstream/gs-corelibraryDependencies += "org.graphstream" % "gs-core" % "1.2"// https://mvnrepository.com/artifact/org.graphstream/gs-uilibraryDependencies += "org.graphstream" % "gs-ui" % "1.2"// https://mvnrepository.com/artifact/org.scalanlp/breeze_2.10libraryDependencies += "org.scalanlp" % "breeze_2.11" % "0.12"// https://mvnrepository.com/artifact/org.scalanlp/breeze-viz_2.11libraryDependencies += "org.scalanlp" % "breeze-viz_2.11" % "0.12"// https://mvnrepository.com/artifact/org.jfree/jcommonlibraryDependencies += "org.jfree" % "jcommon" % "1.0.24"// https://mvnrepository.com/artifact/org.jfree/jfreechartlibraryDependencies += "org.jfree" % "jfreechart" % "1.0.19"

7b1db0a8225047fa844caf7116a7e518.png

ps:注意引用库(模块设置) 

df51157f007046b491b415684a98e22e.png

db2f791084bd4f3d91f4331dd39be9c6.png

代码内容:

491a3731f5c54e50835f4f358ee0541f.png

d869b4c243b344519fa58ce84aa1c965.png

 运行结果:

9cc17dc1f2a04876a474e98f2664d64c.png

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/343848.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日题库:Huawe数通HCIA——全部【813道】

1.关于ARP报文的说法错误的是?单选 A.ARP报文不能被转发到其他广播域 B.ARP应答报文是单播方发送的 C.任何链路层协议都需要ARP协议辅助获取数据链路层标识 DARP请求报文是广播发送的 答案:C  解析: STP协议不需要ARP辅助 2.园区网络搭建时,使用以下哪种协议可以避免出现二层…

MATLAB设计ATF教程

打开Control System Designer 在MATLAB命令行窗口输入sisotool 出现如下Control System Designer窗口 基础Compensator 打开工具后&#xff0c;Compensator初始为1&#xff0c;需要按照需求进行设计。本示例的传递函数为&#xff1a; 基于上述传递函数的Bode图进行后续的设计…

C语言scanf( ) 函数、fprintf( ) 函数与 scanf( ) 函数和printf( ) 函数有什么不同?

一、问题 fscanf( ) 函数、fprintf( ) 函数与 printf( ) 函数、scanf( ) 函数的作⽤相似&#xff0c;都是格式化读写函 数&#xff0c;那么这两个读写函数有什么不同呢&#xff1f; 二、解答 两者的区别就在于前⾯的字符“f”&#xff0c;即 fscanfQ函数和 fprintfD函数的读写…

新买的移动硬盘无法识别

文章目录 背景解决方案 背景 同事新买的移动硬盘&#xff0c;插在电脑上识别不出来盘符&#xff0c;检查了一下&#xff0c;硬盘没问题应该&#xff0c;是ssk的硬盘盒M.2的SSD&#xff0c;硬盘驱动也是正常的&#xff0c;插拔了几次&#xff0c;都不识别&#xff0c;换了太电脑…

​在哪些场景下,使用SOCKS5代理会特别有用?(socks5代理ip)​

SOCKS5代理作为网络协议转换的利器&#xff0c;其独特功能在众多实际场景中展现出了极大的价值。以下是几个特定场景&#xff0c;其中SOCKS5代理的使用将变得尤为重要&#xff1a; 一、网络安全与隐私访问 1.高级渗透测试&#xff1a;在网络安全领域&#xff0c;渗透测试人员…

Android 高德地图API(新版)

新版高德地图 前言正文一、创建应用① 获取PackageName② 获取调试版安全码SHA1③ 获取发布版安全码SHA1 二、配置项目① 导入SDK② 配置AndroidManifest.xml 三、获取当前定位信息① ViewBinding使用和导包② 隐私合规设置③ 权限请求④ 初始化定位⑤ 获取定位信息 四、显示地…

postgresql之翻页优化

列表和翻页是所有应用系统里面必不可少的需求&#xff0c;但是当深度翻页的时候&#xff0c;越深越慢。下面是几种常用方式 准备工作 CREATE UNLOGGED TABLE data (id bigint GENERATED ALWAYS AS IDENTITY,value double precision NOT NULL,created timestamp with time zon…

Django中使用Celery和APScheduler实现定时任务

在之前的文章我们已经学习了Celery和APScheduler的基本使用&#xff0c;下面让我们来了解一下如何在Django中使用Celery和APScheduler Celery 1.前提工作 python 3.7 pip install celery pip install eventlet #5.0版本以下 pip install importlib-metadata4.8.3&#xff08…

使用wheelnav.js构建酷炫的动态导航菜单

目录 前言 一、WheelNav是什么 1、项目地址 2、关于开源协议 3、相关目录介绍 二、如何使用wheelnav.js 1、新建html页面 2、设置style样式 3、创建展示元素实现动态导航 三、参数即方法介绍 1、参数列表 2、运行方法 3、实际成果 四、总结 前言 用户体验永远是一…

STM32项目分享:智能家居安防系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…

PAT-1009 说反话(java实现)

还是这种题好&#xff0c;多简单啊&#xff0c;题目多清晰明了啊&#xff0c;多让人增加学习的热情啊。 题目 给定一句英语&#xff0c;要求你编写程序&#xff0c;将句中所有单词的顺序颠倒输出。 输入格式&#xff1a; 测试输入包含一个测试用例&#xff0c;在一行内给出总长…

安装vs2022低版本

https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-history#updating-your-installation-to-a-specific-release 参考https://www.cnblogs.com/bodong/p/18084619

Android Kotlin 异步操作回调转换为挂起函数

异步接口回调是一种通过接口将任务的执行和结果处理分离开来的编程设计模式。通常用于网络请求、数据库查询等耗时操作。 挂起函数是 Kotlin 中的一个特性&#xff0c;用于简化异步编程。挂起函数是可以在协程中暂停执行并恢复的函数&#xff0c;避免了回调地狱问题&#xff0…

【Postman接口测试】第四节.Postman接口测试项目实战(中)

文章目录 前言五、Postman断言 5.1 Postman断言介绍 5.2 响应状态码断言 5.3 包含指定字符串断言 5.4 JSON数据断言六、参数化 5.1 Postman参数化介绍 5.2 Postman参数化实现 5.3 针对项目登录接口参数化实现 总结 前言 五、Postman断言 5.1 Postman断言介…

使用Aspose技术将Excel/Word转换为PDF

简介&#xff1a;本文将介绍如何使用Aspose技术将Excel文件转换为PDF格式。我们将使用Aspose-Cells-8.5.2.jar包&#xff0c;并演示Java代码以及进行测试。 一、Aspose技术概述 Aspose是一款强大的文档处理库&#xff0c;支持多种编程语言&#xff0c;如Java、C#、Python等。…

【Redis】构建强韧的远程Redis连接与端口保障机制完美指南

【Redis】构建强韧的远程Redis连接与端口保障机制完美指南 大家好 我是寸铁&#x1f44a; 总结了【Redis】构建强韧的远程Redis连接与端口保障机制完美指南✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 在当今的软件开发领域中&#xff0c;远程访问和操作数据存储是极为常见…

【Kubernetes】三证集齐 Kubernetes实现资源超卖(附镜像包)

目录 插叙前言一、思考和原理二、实现步骤0. 资料包1. TLS证书签发2. 使用 certmanager 生成签发证书3. 获取secret的内容 并替换CA_BUNDLE4.部署svc deploy 三、测试验证1. 观察pod情况2. 给node 打上不需要超售的标签【可以让master节点资源不超卖】3. 资源实现超卖4. 删除还…

数据结构--实验

话不多说&#xff0c;直接启动&#xff01;&#x1f44c;&#x1f923; 目录 一、线性表&#x1f60e; 1、建立链表 2、插入元素 3、删除特定位置的元素 4、输出特定元素值的位置 5、输出特定位置的元素值 6、输出整个链表 实现 二、栈和队列&#x1f618; 栈 顺序栈 …

怎么换自己手机的ip地址

在互联网时代&#xff0c;IP地址已经成为了我们数字身份的一部分。无论是浏览网页、下载文件还是进行在线交流&#xff0c;我们的IP地址都在默默发挥着作用。然而&#xff0c;有时出于安全或隐私保护的考虑&#xff0c;我们可能需要更换手机的IP地址。那么&#xff0c;如何轻松…

Rust基础学习-Rust宏

Rust中的宏是生成另一段代码的一段代码。可以根据输入生成代码&#xff0c;简化重复模式&#xff0c;使得代码更加简洁。比如我们一直在用的println!,vec!,panic!都是宏。 创建宏 可以使用macro_rules!创建一个宏&#xff1a; macro_rules! macro_name {(...) > {...} }这…