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.mzph.cn/pingmian/24446.shtml

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

相关文章

基于思通数科大模型的设备隐患智能检测:图像处理与声音分析的融合应用

在现代工业生产中&#xff0c;设备的稳定运行对保障生产效率和产品质量至关重要。然而&#xff0c;设备的老化、磨损以及异常状态的检测往往需要大量的人力和物力。思通数科大模型结合图像处理技术和声音分析技术&#xff0c;为设备隐患检测提供了一种自动化、高效的解决方案。…

Docker 管理 | 代理配置、内网共享和 Harbor 部署

唠唠闲话 在现代软件开发和运维中&#xff0c;容器技术已经成为构建、部署和管理应用程序的标准工具。然而&#xff0c;在实际操作中&#xff0c;我们常常需要面对一些常见的挑战&#xff0c;如容器访问外部资源的代理配置、内网环境下的镜像共享以及企业级镜像管理。 本教程…

关键字、保留字、标识符

关键字 关键字是被 Java 赋予了特定含义的英文单词。 关键字的字母全部小写。 保留字 现有的 Java 版本尚未使用&#xff0c;但是以后版本可能会作为关键字使用。自己命名标识符时需要避免使用这些保留字。 保留字有&#xff1a;byValue, cast, future, generic, inner, op…

Spring Boot整合WebSocket和Redis实现直播间在线人数统计功能

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

高精度加法的实现

这是C算法基础-基础算法专栏的第七篇文章&#xff0c;专栏详情请见此处。 引入 在C语言中&#xff0c;int的可存储数据范围是-2147483648~2147483647&#xff0c;long long的可存储数据范围是-9223372036854775808~9223372036854775807&#xff0c;但是如果一些数据比long long…

Qt下调用Snap7库与西门子PLC通信

文章目录 前言一、Snap7源码下载二、Snap7的dll常用函数功能介绍三、Snap7Lib.pri模块的封装四、下载链接总结 前言 本文主要讲述了在Qt下调用Snap7库与西门子PLC进行通信&#xff0c;在这里将Snap7的源码与动态库整合在一起封装了一个自己的Snap7Lib.pri子模块&#xff0c;方…

【Python】读取文件夹中所有excel文件拼接成一个excel表格 的方法

我们平常会遇到下载了一些Excel文件放在一个文件夹下&#xff0c;而这些Excel文件的格式都一样&#xff0c;这时候需要批量这些文件合并成一个excel 文件里。 在Python中&#xff0c;我们可以使用pandas库来读取文件夹中的所有Excel文件&#xff0c;并将它们拼接成一个Excel表…

尝试使用blazor(一)吐槽blazor,未开始之前,先吐为敬

为什么要写一点关于blazor的文章呢?其实是没什么人看的&#xff0c;我知道blazor目前在国内使用的人数&#xff0c;恐怕一辆大巴车都坐不满。非常冷门&#xff0c;我刚用blazor遇到问题&#xff0c;花钱找人解决&#xff0c;找了国内几个著名的平台&#xff0c;几乎没人会blaz…

【docker】centos7配置docker镜像阿里云加速

国内从 DockerHub 拉取镜像有时会遇到困难&#xff0c;由于网络原因&#xff0c;下载一个Docker官方镜像可能会需要很长的时间&#xff0c;甚至下载失败。此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务。 测试了几次阿里云的加速是最快的。 …

Golang | Leetcode Golang题解之第131题分割回文串

题目&#xff1a; 题解&#xff1a; func partition(s string) (ans [][]string) {n : len(s)f : make([][]int8, n)for i : range f {f[i] make([]int8, n)}// 0 表示尚未搜索&#xff0c;1 表示是回文串&#xff0c;-1 表示不是回文串var isPalindrome func(i, j int) int8…

安装 JDK 8

安装包 百度网盘 提取码&#xff1a;6666 安装步骤 安装路径不要有中文或者特殊符号如空格等。 双击安装包开始安装。 更改安装路径&#xff1a; 跳出一个页面&#xff0c;安装公共 JRE&#xff1a; 配置环境变量&#xff1a; 配置成功&#xff1a; 去掉自动更新

AI数据分析:用deepseek根据Excel数据绘制分裂饼形图

工作任务&#xff1a;要绘制下面表格中月活用户占比的分裂饼形图 在deepseek中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个Python脚本编写的任务&#xff0c;具体步骤如下&#xff1a; 读取Excel文件"F:\AI自媒体内容\AI行业数据分析\poetop5…

【LLM】度小满金融大模型技术创新与应用探索

note 从通用大模型到金融大模型金融大模型的训练技术创新金融大模型的评测方法创新金融大模型的应用实践创新总结&#xff1a;金融大模型迭代路径 一、轩辕大模型 二、垂直大模型训练 1. 数据准备 数据质量是模型效果的保障。首先数据要丰富&#xff0c;这是必备的条件。我们…

MeiliSearch-轻量级且美丽的搜索引擎

MeiliSearch-轻量级且美丽的搜索引擎 MeiliSearch 是一个功能强大、快速、开源、易于使用和部署的搜索引擎。它具有以下特点&#xff1a; 支持中文搜索&#xff1a;MeiliSearch 对中文有良好的支持&#xff0c;不需要额外的配置。高度可定制&#xff1a;搜索和索引都可以高度…

UML实现图-组件图

概述 组件图(ComponentDiagram)描述了软件的各种组件和它们之间的依赖关系。组件图中通常包含4种元素:组件、程序、包、任务&#xff0c;各个组件之间还可以相互依赖。 一、组件的表示法 组件是定义了良好接口的物理实现单元&#xff0c;是系统中可替换的物理部件。在一般情…

攻防世界---misc---小小的PDF

1、题目描述&#xff0c;下载附件是一个PDF&#xff0c;打开之后是这样&#xff0c;有两页PDF 2、用winhex分析&#xff0c;没有发现奇怪的地方 3、在kali中binwalk发现有多张照片 4、接着使用foremost将图片分离出来&#xff0c; 5、得到3张图片&#xff0c;打开第3张图片&am…

Android音频架构

Android音频架构 前面《Android音频API》介绍了Android系统提供的四个层面的音频API&#xff1a; Java层MediaRecorder&MediaPlayer系列&#xff1b;Java层AudioTrack&AudioRecorder系列&#xff1b;Jni层opensles&#xff1b;JNI层AAudio&#xff08;Android O引入&…

探索智慧林业系统的总体架构与应用

背景&#xff1a; 随着人们对森林资源保护和管理的重视&#xff0c;智慧林业系统作为一种新兴的林业管理手段&#xff0c;正在逐渐受到广泛关注和应用。智慧林业系统的总体架构设计与应用&#xff0c;将现代信息技术与林业管理相结合&#xff0c;为森林资源的保护、管理和利用…

注册自定义材质实现qgis里不同比例尺下材质不被拉升的效果

前景提要&#xff1a; 在QGIS里的显示效果&#xff0c;用的是示例的/img/textures/line-interval.png材质图片。 下载示例 git clone https://gitee.com/marsgis/mars3d-vue-example.git 相关效果 比如材质是5像素&#xff0c;在1:100000万比例尺下&#xff0c;线显示的长…

树的重心-java

主要通过深度优先搜索来完成树的重心&#xff0c;其中关于树的重心的定义可以结合文字多加理解。 文章目录 前言☀ 一、树的重心☀ 二、算法思路☀ 1.图用邻接表存储 2.图的遍历 3.算法思路 二、代码如下☀ 1.代码如下&#xff1a; 2.读入数据 3,代码运行结果 总结 前言☀ 主…