sparkgraph
什么是sparkgragh : 它是为了为用户建立关系的视图
SparkGraph图计算
基础篇
1. what?
表示数据关系的数据结构
基本元素: 点Vertex,边Edge
Vertex[(VertexId:Long,VertexAttr:Any)]
Edge[(srcVertexId:Long,dstVertexId:Long,attr:Any)]
组合元素: Triplet(源点SrcVertex+边Edge+目标点LstVertex)
类似于RDD
弹性的
分布式的
容错的
2. why?
能够表达复杂的数据关系,并做复杂的图计算
User(userId:Int,name:String,age:Int)
user_relation(fromUserId:Int,toUserId:Int,relation:String)
3. where?
社交
4. how?
val sc:SparkContext = …
val rddVertex = sc.makeRDD(Seq[(VertexId,T]) //创建点RDD T点属性:单个值用基础类型,多个值用样例类
val rddEdge = sc.makeRDD(Seq[Edge(T)]) //创建边RDD T边属性: 单个值用基础类型,多个值用样例类
val gragh = Graph(rddVertex,rddEdge)
属性
graph.vertices //点集合
graph.edges //边集合
graph.triplets //点边点组合集合
gragh.inDegrees //入度 到某点取得记录条数 (?,dstVertexId)
graph.outDegrees //出度 从某点出发的记录条数 (srcVertexId,?)
转换算子
graph.mapTriplets ED2:Graph[VD,ED2]
//针对点属性逐个变形处理,返回新的属性,最终返回基于变性后的点和原来的边的图对象
graph.mapVertices VD2:Graph[VD2,ED] 变一个点出去
graph.mapEdges ED2:Graph[VD,ED2] 变一个边出去
算法篇
package cn.kgc.sparkGraghimport org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.graphx._object SparkGraph01 {case class Person(name:String,age:Int)def main(args: Array[String]): Unit = {val CONF = new SparkConf().setMaster("local[*]").setAppName("spark_graphx_02")val SC = new SparkContext(CONF)//rddVertexval rddVertex: RDD[(Long, Person)] = SC.makeRDD(Array((1L, Person("Henry", 22)),(2L, Person("Pola", 20)),(3L, Person("Ariel", 18)),(4L, Person("Jack", 29)),(5L, Person("Tom", 31)),(6L, Person("Shel", 16)),(7L, Person("Niky", 28))))//rddEdgeval rddEdge: RDD[Edge[String]] = SC.makeRDD(Array(Edge(1L, 2L, "family"),Edge(1L, 3L, "family"),Edge(1L, 4L, "teacher"),Edge(1L, 5L, "teacher"),Edge(1L, 6L, "teacher"),Edge(1L, 7L, "teacher"),Edge(4L, 5L, "friend"),Edge(4L, 6L, "friend"),Edge(6L, 7L, "friend"),Edge(1L, 4L, "friend"),Edge(1L, 5L, "friend")))val graph: Graph[Person, String] = Graph(rddVertex, rddEdge).cache()//22岁以上的人 点遍历//(VertexId,Person)//graph.vertices.filter(_._2.age>22).foreach(println)//好友关系 关系遍历//(srcVertexId,dstVertexId,attr)//graph.edges.filter(_.attr.equals("friend")).foreach(println)//我的好友的数量var ME = 1L// val graphMe: Graph[Person, PartitionID] = graph.mapTriplets(e => {// // e.srcId //源点VertexId
// // e.srcAttr //源点 --Person
// // e.dstId //目标点 --VertexId
// // e.dstAttr //目标点 --Person
// // e.attr //关系数据 String
// if (e.srcId == 1L && e.attr.equals("friend")) {// 1
// } else {// 0
// }
// })
// graphMe.triplets.foreach(e=>println(s"${e.srcId}\t${e.srcAttr}\t${e.attr}"))
// println("____")
// println(graphMe.triplets.map(_.attr).sum())// //aggregateMessages[Int] Int=>消息的类型
// graph.aggregateMessages[Int](sendMsg = ec=>{// //类似于Triplet,扩展了发送消息的函数
// //ec.sendToSrc(msg:Int) 向源点发送消息
// //ec.sendToDst(msg:Int) 向目标点发送消息
// if(ec.srcId == ME && ec.attr.equals("teacher")){// ec.sendToSrc(1)
// }
// },mergeMsg = _+_).foreach(println)
// //(1,2) 1号用户有2个好友SC.stop()}}
sparkgraph相关推荐
- Spark GraphX 中的PageRank算法、pregel函数、航班飞行网图分析
PageRank算法 PageRank算法原理剖析及Spark实现 - 简书 (jianshu.com) import org.apache.spark.SparkContext import org ...
最新文章
- Phpcms与ucenter整合系统设置
- 湖南网络推广教大家如何“挽回”网站被降权的排名和权重?
- java action 上传文件_JavaWeb框架_Struts2_(七)-----文件的上传和下载
- 吴恩达深度学习笔记7-Course2-Week3【超参数调试、Batch 正则化和程序框架】
- python之attrgetter函数对对象排序
- NASA 传奇数学家去世,她曾笔算了登月轨道
- 《出发吧一起》第二阶段个人总结——Day01
- 图机器学习在度小满风控中的应用
- 迅雷下gho文件变成php,GHO格式文件转换成WIM格式文件
- 阿里数据中台与OneData
- Android 串口蓝牙通信开发Java版本
- 公众号运营工具推荐大会!这些如果你还没用就out啦!
- 将数据库转换为word文档
- 2. Switch能否用String做参数?
- 网站添加“富强·民主·爱国”鼠标点击特效美化
- 我也是一只IT小小鸟
- CSS使用彩色字体图标(Vue/Uni)
- 电脑游戏业编年史之一游戏的诞生
- 简单题目:给出一个整数,转换为16进制的字符
- flume-Kafka-Strom架构的搭建及使用
热门文章
- 使用代理IP发送请求,出现502错误 java.io.IOException: Unable to tunnel through proxy. Proxy returns “HTTP/1.1 502
- Monkey-介绍、优势、操作步骤、中止monkey、
- js逆向-某市公共资源交易网
- ElasticsearchTemplate 的API
- 计算机系统的虚拟存储器,其最大容量和实际容量分别取决于哪些因素
- jmeter压测步骤
- TCP拥塞控制(CC),让我不得开心颜
- 最近找实习的笔试面试经历
- 获取美元人民币以及USDT人民币汇率-Python版
- 什么是CAA? 如何解决CAA未授权问题?