package Spark_GraphX

import org.apache.spark.graphx._
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext} object 属性图 {
def main(args: Array[String]): Unit = {
val conf=new SparkConf().setAppName("SimpleGraphX").setMaster("local[4]")
val sc=new SparkContext(conf)
//定义顶点
val users:RDD[(VertexId,(String,String))]=sc.parallelize(Array((3L,("soyo","student")),(7L,("soyo2","postdoc")),(5L,("xiaozhou","professor")),(2L,("xiaocui","professor"))))
//定义边
val relationships:RDD[Edge[String]]=sc.parallelize(Array(Edge(3L,7L,"collab"),Edge(5L,3L,"advisor"),Edge(2L,5L,"colleague"),Edge(5L,7L,"parent")))
//定义默认的作者,以防与不存在的作者有边
val defaultUser=("Jone","Dance")
val graph=Graph(users,relationships,defaultUser)
println("*****************")
println("找到图中属性是student的点")
graph.vertices.filter{case (id,(name,occupation))=>occupation=="student"}.collect.foreach{case(id,(name,occupation))=>println(s"$name is $occupation")}
println("--------------------------")
println("找到途中边的属性是advisor的边")
graph.edges.filter(x=>x.attr=="advisor").collect().foreach(x=>println(s"${x.srcId} to ${x.dstId} 属性为 ${x.attr}"))
println("--------------------------")
println("找到图中的最大出度,入度,度数")
println("最大的出度:"+graph.outDegrees.reduce(max))
println("最大的入度:"+graph.inDegrees.reduce(max))
println("最大的度数:"+graph.degrees.reduce(max))
//Scala 可直接调用Java程序
// System.out.print("hello word")
//属性操作
println("------------------------")
println("给图中每个顶点的职业属性上加上“spark字符串")
graph.mapVertices{case (id,(name,occupation))=>(id,(name,occupation+"Spark"))}.vertices.collect.foreach(x=>println(s"${x._2._1} is ${x._2._2} : ${x._1} : ${x._2}"))
println("------------------------")
println("给途中每个元组的Edge的属性值设置为源顶点属性值+边的属性值+目标定点属性值:")
graph.mapTriplets(x=>x.srcAttr._2+"+"+x.attr+"+"+x.dstAttr._2).edges.collect().foreach(println)
//可以证明:属性操作下,图的结构都不受影响.
graph.mapTriplets(x=>x.srcId+x.dstId).edges.collect().foreach(println)
//结构操作 :triplets(表示边)
/*
reverse操作返回一个所有边方向取反的新图.该反转操作并没有修改图中顶点,边的属性,更没有增加边的数量.
subgraph操作主要利用顶点和边进行判断,返回的新图中包含满足判断要求的顶点,边.该操作常用于一些情景,比如:限制感兴趣的图顶点和边,删除损坏连接.
*/
println("------结构操作---------")
graph.triplets.map(x=>x.srcAttr._1+" is the "+x.attr+" of "+x.dstAttr._1).foreach(println)
println("-------删除职业是postdoc的节点,构建子图----------")
val validGraph=graph.subgraph(vpred=(id,attr)=>attr._2!="postdoc")
validGraph.vertices.foreach(println)
validGraph.triplets.map(x=>x.srcAttr._1+" is the "+x.attr+" of "+x.dstAttr._1).foreach(println)
println("----------构建职业是professor的子图,并打印子图的顶点--------")
val subGraph=graph.subgraph(vpred = (id,attr)=>attr._2=="professor")
subGraph.vertices.collect().foreach(x=>println(s"${x._2._1} is ${x._2._2}")) }
//VertexId:顶点,Int:度数
def max(a:(VertexId,Int),b:(VertexId,Int)):(VertexId,Int)={
if(a._2>b._2)a else b
} }

结果:

*****************
找到图中属性是student的点
soyo is student
--------------------------
找到途中边的属性是advisor的边
to 属性为 advisor
--------------------------
找到图中的最大出度,入度,度数
最大的出度:(,)
最大的入度:(,)
最大的度数:(,)
------------------------
给图中每个顶点的职业属性上加上“spark字符串
is (xiaozhou,professorSpark) : : (,(xiaozhou,professorSpark))
is (xiaocui,professorSpark) : : (,(xiaocui,professorSpark))
is (soyo,studentSpark) : : (,(soyo,studentSpark))
is (soyo2,postdocSpark) : : (,(soyo2,postdocSpark))
------------------------
给途中每个元组的Edge的属性值设置为源顶点属性值+边的属性值+目标定点属性值:
Edge(,,student+collab+postdoc)
Edge(,,professor+advisor+student)
Edge(,,professor+colleague+professor)
Edge(,,professor+parent+postdoc)
Edge(,,)
Edge(,,)
Edge(,,)
Edge(,,)
------结构操作---------
xiaozhou is the parent of soyo2
soyo is the collab of soyo2
xiaozhou is the advisor of soyo
xiaocui is the colleague of xiaozhou
-------删除职业是postdoc的节点,构建子图----------
(,(xiaozhou,professor))
(,(xiaocui,professor))
(,(soyo,student))
xiaozhou is the advisor of soyo
xiaocui is the colleague of xiaozhou
----------构建职业是professor的子图,并打印子图的顶点--------
xiaozhou is professor
xiaocui is professor

Spark GraphX 属性图操作的更多相关文章

  1. Spark GraphX宝刀出鞘,图文并茂研习图计算秘笈与熟练的掌握Scala语言【大数据Spark实战高手之路】

    Spark GraphX宝刀出鞘,图文并茂研习图计算秘笈 大数据的概念与应用,正随着智能手机.平板电脑的快速流行而日渐普及,大数据中图的并行化处理一直是一个非常热门的话题.图计算正在被广泛地应用于社交 ...

  2. Spark GraphX企业运用

    ========== Spark GraphX 概述 ==========1.Spark GraphX是什么?  (1)Spark GraphX 是 Spark 的一个模块,主要用于进行以图为核心的计 ...

  3. Spark GraphX学习资料

    <Spark GraphX 大规模图计算和图挖掘> http://book.51cto.com/art/201408/450049.htm http://www.csdn.net/arti ...

  4. 明风:分布式图计算的平台Spark GraphX 在淘宝的实践

    快刀初试:Spark GraphX在淘宝的实践 作者:明风 (本文由团队中梧苇和我一起撰写,并由团队中的林岳,岩岫,世仪等多人Review,发表于程序员的8月刊,由于篇幅原因,略作删减,本文为完整版) ...

  5. Spark GraphX 聚合操作

    package Spark_GraphX import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.graph ...

  6. Spark GraphX图计算核心源码分析【图构建器、顶点、边】

    一.图构建器 GraphX提供了几种从RDD或磁盘上的顶点和边的集合构建图形的方法.默认情况下,没有图构建器会重新划分图的边:相反,边保留在默认分区中.Graph.groupEdges要求对图进行重新 ...

  7. Spark GraphX图处理编程实例

    所构建的图如下: Scala程序代码如下: import org.apache.spark._ import org.apache.spark.graphx._ // To make some of ...

  8. Spark GraphX图计算核心算子实战【AggreagteMessage】

    一.简介 参考博客:https://www.cnblogs.com/yszd/p/10186556.html 二.代码实现 package graphx import org.apache.log4j ...

  9. Spark GraphX图计算简单案例【代码实现,源码分析】

    一.简介 参考:https://www.cnblogs.com/yszd/p/10186556.html 二.代码实现 package big.data.analyse.graphx import o ...

随机推荐

  1. 动态创建div(鼠标放上显示二维码)

    最近的微信大行其道.各个网站上都给出的微信验证码,进行手机扫描加入. 怎么创建类似与点击鼠标弹出一个浮动的div显示二维码的这种效果. 1.首先制作好这样的图片,写css样式 <style ty ...

  2. HDU 1016 素数环问题

    题目大意: 给定1-n这n个数,组成以1开头的素数环,保证相邻两个数相加均为素数 题目用dfs搜索再回溯,这样碰到不成立的立刻退出递归,就减少了很多步骤,不然暴力来就是n!次复杂度,肯定是超时的 每次 ...

  3. [BZOJ3196] [Tyvj1730] 二逼平衡树(线段树 套 Splay)

    传送门 至少BZOJ过了,其他的直接弃. 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的 ...

  4. Codeforces Round #264 (Div. 2) D

    题意: 给出最多5个序列,问这几个序列的最长公共子序列的长度是多少. solution : 脑抽级别我是,第一个序列每个数字位置固定,这样只要维护一个k-1维的偏序集就好了.然后在保证每个位置合法的情 ...

  5. 选学霸(codevs 3372)

    题目描述 Description 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一部分没有,同学们就会抗议.所以老师想请你帮他求出他该选多少学霸,才能既不让同 ...

  6. 【BZOJ4868】期末考试(整数三分)

    题意: 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天 或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待 ...

  7. HTML5调用传感器的资料汇总

    都可以调用:devicetemperature(温度).devicepressure(压力).devicehumidity(湿度).devicelight(光).devicenoise(声音).dev ...

  8. School Marks-CodeForces

    B. School Marks time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  9. windows-nginx安装与运行静态资源

    windows-nginx 官网 http://nginx.org/en/docs/windows.html 点击跳转 安装包下载 http://nginx.org/en/download.html ...

  10. IE11 文档模式空白

    环境描述: win7 64位系统 安装了 更新 IE11-Windows6.1-KB2929437-x64.IE11-Windows6.1-KB3008923-x64 解决方案: 卸载 IE11-Wi ...