简介

spark graphx官网:http://spark.apache.org/docs/latest/graphx-programming-guide.html#overview

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.RDD
import 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的同事

十、spark graphx的scala示例的更多相关文章

  1. 十二、spark MLlib的scala示例

    简介 spark MLlib官网:http://spark.apache.org/docs/latest/ml-guide.html mllib是spark core之上的算法库,包含了丰富的机器学习 ...

  2. 十一、spark SQL的scala示例

    简介 spark SQL官网:http://spark.apache.org/docs/latest/sql-programming-guide.html sparkSQL是构建在sparkCore之 ...

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

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

  4. 转载:Spark GraphX详解

    1.GraphX介绍 1.1 GraphX应用背景 Spark GraphX是一个分布式图处理框架,它是基于Spark平台提供对图计算和图挖掘简洁易用的而丰富的接口,极大的方便了对分布式图处理的需求. ...

  5. Spark GraphX 的数据可视化

    概述 Spark GraphX 本身并不提供可视化的支持, 我们通过第三方库 GraphStream 和 Breeze 来实现这一目标 详细 代码下载:http://www.demodashi.com ...

  6. 大数据技术之_19_Spark学习_05_Spark GraphX 应用解析 + Spark GraphX 概述、解析 + 计算模式 + Pregel API + 图算法参考代码 + PageRank 实例

    第1章 Spark GraphX 概述1.1 什么是 Spark GraphX1.2 弹性分布式属性图1.3 运行图计算程序第2章 Spark GraphX 解析2.1 存储模式2.1.1 图存储模式 ...

  7. 转载:四两拨千斤:借助Spark GraphX将QQ千亿关系链计算提速20倍

    四两拨千斤:借助Spark GraphX将QQ千亿关系链计算提速20倍 时间 2016-07-22 16:57:00 炼数成金 相似文章 (5) 原文  http://www.dataguru.cn/ ...

  8. Spark GraphX从入门到实战

      第1章 Spark GraphX 概述 1.1 什么是 Spark GraphX   Spark GraphX 是一个分布式图处理框架,它是基于 Spark 平台提供对图计算和图挖掘简洁易用的而丰 ...

  9. Spark—GraphX编程指南

    Spark系列面试题 Spark面试题(一) Spark面试题(二) Spark面试题(三) Spark面试题(四) Spark面试题(五)--数据倾斜调优 Spark面试题(六)--Spark资源调 ...

随机推荐

  1. linux命令之信息显示与搜索文件命令

    1.uname:显示系统信息 该命令用于显示系统相关的信息,比如内核版本号,硬件架构等. 参数 说明 -n(常用) 显示主机名称 -r(常用) 显示内核发行版本号 示例: 1)显示主机名 [root@ ...

  2. C#取得控制台应用程序的根目录方法

    如有雷同,不胜荣幸,若转载,请注明 取得控制台应用程序的根目录方法1:Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径2:AppDomain.Curren ...

  3. 基于Django+celery二次开发动态配置定时任务 ( 二)

    一.需求 结合上一篇,使用djcelery模块开发定时任务时,定时任务的参数都保存在djcelery_periodictask表的args.kwargs字段里,并且是json格式.那么,当定时任务多了 ...

  4. 我永远喜欢我的偶像 KIKU

  5. leetcode-292-Nim Game(搬石子)

    题目描述: You are playing the following Nim Game with your friend: There is a heap of stones on the tabl ...

  6. 队列的理解和实现(一) ----- 循环队列(java实现)

    什么是队列 我们都知道栈是先进后出的一种线性表,与之相反的是,队列是一种先进先出的线性表.它只允许在表的一端进行插入,而在另一端进行删除.举个例子来说,在生活中我们买东西需要进行排队,最先排队的可以最 ...

  7. mongodb主从备份 和 手动主从切换

    环境: 主机A:172.16.160.91 主机B:172.16.160.92 配置主机A [root@master zhxf]# cat docker-compose.yml version: '3 ...

  8. ADC新库

    1.单次采集模式 1.在STM32CUBMX中设置为单次采集模式 2.在C文件中用HAL_ADC_START()函数启动ADC 3.用HAL_ADC_PollForConversion()延时等待采集 ...

  9. 关于npm run dev报错npm ERR! missing script: dev

    出现这个问题应当重新使用 vue init webpack 来初始化工程. 在执行 npm run dev 就可以执行了.

  10. Prufer序列与树的计数(坑)

    \(prufer\)序列: 无根树转\(prufer\)序列: 不断找编号最小的叶子节点,删掉并在序列中加入他相连的节点. \(prufer\)转无根树: 找到在目前\(prufer\)序列中未出现且 ...