## sparkGraphX 基础操作 原

JPblog

1. 目的

由数组形成graph并展示基础操作

2. 素材

由Array生成vertexRDD和edgeRDD

3. 代码

``````/**
* Created by puwenchao on 2016-07-06.
*/
package test
import org.apache.log4j.{Level, Logger}
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.graphx._
import org.apache.spark.graphx.lib.ShortestPaths
import org.apache.spark.rdd.RDD

object triangle {
def main(args: Array[String]) {
//屏蔽日志
Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)

//设置运行环境
val conf = new SparkConf().setAppName("triangle").setMaster("local")
val sc = new SparkContext(conf)

//设置顶点和边，注意顶点和边都是用元组定义的Array
//顶点的数据类型是VD:(String,Int)
val vertexArray = Array(
(3L, ("rxin", 28)),
(7L, ("jgonzal", 27)),
(5L, ("franklin", 65)),
(2L, ("istoica", 42))
)
//边的数据类型ED:Int
val edgeArray = Array(
Edge(3L, 7L, 7),
Edge(5L, 3L, 2),
Edge(2L, 5L, 4),
Edge(5L, 7L, 3)
)

//构造vertexRDD和edgeRDD
val vertexRDD: RDD[(Long, (String, Int))] = sc.parallelize(vertexArray)
val edgeRDD: RDD[Edge[Int]] = sc.parallelize(edgeArray)
//构造图Graph[VD,ED]
val graph: Graph[(String, Int), Int] = Graph(vertexRDD, edgeRDD)
//筛选有效子图
val subgraph= graph.subgraph(vpred = (id,attr) => attr._2 != "Missing")
println("subgraph:")
subgraph.vertices.collect().foreach(println(_))

//三元组
val e=graph.triplets
println("\ntriplets:")
e.take(10).foreach {println}

//总边数
val f=graph.numEdges
println("\nnumEdges:"+f)

//总顶点数
val g=graph.numVertices
println("\nnumVertices:"+g)

//顶点入度
val h=graph.inDegrees
println("\ninDegrees:"+h.collect.mkString(","))

//顶点出度
val i=graph.outDegrees
println("\noutDegrees:"+i.collect.mkString(","))

//筛选来源点ID>目标点ID
val j=graph.edges.filter { case Edge(src, dst, prop) => src > dst }.count
println("\nedge-filter:"+j)

//三角计数
val l=graph.triangleCount.vertices
println("\ntriangleCount:")
l.foreach(println)

//网页排序算法
val m=graph.pageRank(0.1).vertices
println("\npageRank:")
m.foreach(println)

//最短路径
val landmarks = Seq(7).map(_.toLong)
val o=ShortestPaths.run(graph,landmarks).vertices
println("\nShortestPaths:")
o.foreach(println)

sc.stop()
}
}``````

4. 输出

subgraph:
(3,(rxin,28))
(7,(jgonzal,27))
(5,(franklin,65))
(2,(istoica,42))

triplets:
((2,(istoica,42)),(5,(franklin,65)),4)
((3,(rxin,28)),(7,(jgonzal,27)),7)
((5,(franklin,65)),(3,(rxin,28)),2)
((5,(franklin,65)),(7,(jgonzal,27)),3)

numEdges:4

numVertices:4

inDegrees:(3,1),(7,2),(5,1)

outDegrees:(3,1),(5,2),(2,1)

edge-filter:1

triangleCount:
(3,1)
(7,1)
(5,1)
(2,0)

pageRank:
(3,0.2679375)
(7,0.39543749999999994)
(5,0.27749999999999997)
(2,0.15)

ShortestPaths:
(3,Map(7 -> 1))
(7,Map(7 -> 0))
(5,Map(7 -> 1))
(2,Map(7 -> 2))

### JPblog

DMP用户画像系统（SparkGraphX SparkCore SparkSQL）

DMP用户画像系统（SparkGraphX SparkCore SparkSQL） 课程观看地址：http://www.xuetuwuyou.com/course/221 课程出自学途无忧网：http://www.xuetuwuyou.com DMP系统 用户画像也称人物角色，...

2017/10/18
0
0
GraphX二度关系（代码）

mbshqqb
2017/11/09
0
0
JavaScript 基础操作封装函数--icewood

icewood简介 icewood是一个为javascript提供基础操作封装函数的类库. icewood是一个为javascript提供基础操作封装函数的类库.封装了数组字符串数字的很多操作. icewood以易学为原则,以程序员...

2017/03/03
195
0
Go开发实战

astaxie
2013/08/05
6.1K
0

01/04
0
0

OSChina 周三乱弹 —— 孤独到都和病毒发生了感情了

Osc乱弹歌单（2019）请戳（这里） 【今日歌曲】 @-冰冰棒- ：#今日歌曲推荐# 逃跑计划《一万次悲伤 (Live)》 《一万次悲伤 (Live)》- 逃跑计划 手机党少年们想听歌，请使劲儿戳（这里） 现在...

27分钟前
6
2
test

carmen-ly

1
0
Android webview热门组件agentweb:4.0.2无法自适应的问题

Android webview热门组件agentweb:4.0.2无法自适应的问题 //设置自适应屏幕，两者合用mAgentWeb.getAgentWebSettings().getWebSettings().setUseWideViewPort(true); //将图片调整到适合w...

Gemini-Lin

5
0

5
0
js中的对象创建的模式以及继承模式

3
0