博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
十、spark graphx的scala示例
阅读量:6280 次
发布时间:2019-06-22

本文共 1757 字,大约阅读时间需要 5 分钟。

简介

spark graphx官网:

spark graphx是基于spark core之上的一个图计算组件,graphx扩展了spark RDD,是spark对于图计算的一种抽象。

这里的图,不是“图画”的意思,是一种数据结构。这种数据结构由“点”和“线”组成,拿用户关系图来说,“点”描述的就是用户,“线”描述的就是这些用户之间的关系,所以由“点”和“线”组成了一张“用户关系图”,如图:

vertex table: 点,是由ID和Property属性组成的,ID必须是Long类型

edge table:线,是由起始ID,终点ID,property属性组成的,ID也必须为Long类型

property graph:图,由vertex和edge的数据,就可以构建出一张graph图数据结构

而spark graphx就是将这种数据结构创建出来,并提供简单易用的API来操作这个数据结构,如:查询、转换、关联、聚合等

代码示例

下面是scala语言的代码示例:

import org.apache.spark.graphx.{Edge, Graph}import org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}/**  * @Description spark graphx demo  * @Author lay  * @Date 2018/12/09 20:19  */object SparkGraphxDemo {  var conf: SparkConf = _  var sc: SparkContext = _  var userData: Array[String] = Array("1 lay", "2 marry", "3 gary")  var relationData: Array[String] = Array("1 2 朋友", "1 3 同事", "2 3 姐弟")  var userRDD: RDD[(Long, String)] = _  var relationRDD: RDD[Edge[String]] = _  def init(): Unit = {    conf = new SparkConf().setAppName("spark graphx demo").setMaster("local")    sc = new SparkContext(conf)  }  def loadRdd(): Unit = {    userRDD = sc.parallelize(userData).map { x => val lines = x.split(" "); (lines(0).toLong, lines(1)) }    relationRDD = sc.parallelize(relationData).map { x => val lines = x.split(" "); Edge(lines(0).toLong, lines(1).toLong, lines(2)) }  }  def main(args: Array[String]): Unit = {    // 初始化    init()    // 加载rdd    loadRdd()    // 创建graph    var graph = Graph(userRDD, relationRDD)    // 找出和lay有关系的人    graph.triplets.filter(x => x.srcId == 1L).foreach{x => printf("%s是%s的%s", x.dstAttr,  x.srcAttr, x.attr);println()}  }}

我们将userRDD和relationRDD构建成了一个抽象结构Graph,然后过滤出了和lay有关系的人,并循环打印出结果,如下:

marry是lay的朋友gary是lay的同事

 

转载于:https://www.cnblogs.com/lay2017/p/10093389.html

你可能感兴趣的文章
Flex&Bison手册
查看>>
solrCloud+tomcat+zookeeper集群配置
查看>>
/etc/fstab,/etc/mtab,和 /proc/mounts
查看>>
Apache kafka 简介
查看>>
socket通信Demo
查看>>
技术人员的焦虑
查看>>
js 判断整数
查看>>
建设网站应该考虑哪些因素
查看>>
mongodb $exists
查看>>
js实现页面跳转的几种方式
查看>>
sbt笔记一 hello-sbt
查看>>
常用链接
查看>>
pitfall override private method
查看>>
!important 和 * ----hack
查看>>
聊天界面图文混排
查看>>
控件的拖动
查看>>
svn eclipse unable to load default svn client的解决办法
查看>>
Android.mk 文件语法详解
查看>>
QT liunx 工具下载
查看>>
内核源码树
查看>>