Spark GraphX 算法实例

文章目录

  • Spark GraphX 算法实例
    • PageRank算法
    • 连通分支算法
    • 三角形计算算法

Spark GraphX 算法实例

GraphX 中自带一系列图算法来简化分析任务。这些算法存在于org.apache.spark.graphx.lib包中,可以被Graph通过GraphOps直接访问。本章节主要介绍GraphX中主要的三个算法。

PageRank算法

PageRank,有成网页排名算法。PageRank通过网络的超链接关系确定网页的等级好坏,在搜索引擎优化操作中常用来评估网页的相关性和重要性。

PageRank同样可以在图中测量每个顶点的重要性,假设存在一条从顶点u到顶点v的边,就代表顶点u对顶点v的支持。例如:微博中,一个用户被其他很多用户关注,那么这个用户的排名将会很高。

GraphX 自带静态和动态的PageRank算法实现。静态的PageRank算法运行在固定的迭代次数,动态的PageRank算法运行直到整个排名收敛(eg:通过限定可容忍的值来停止迭代)。

利用GraphX自带的社会网络数据集实例,用户集合数据集存在/usr/local/Spark/data/graphx/users.txt,用户关系数据集存在/usr/local/Spark/data/graphx/followers.txt。现在计算每个用户的PageRank:

import org.apache.log4j.{Level,Logger}
import org.apache.spark._
import org.apache.spark.graphx.GraphLoader
object SimpleGraphX {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("SimpleGraphX").setMaster("local")val sc = new SparkContext(conf)// Load the edges as a graphval graph = GraphLoader.edgeListFile(sc, "file:///usr/local/Spark/data/graphx/followers.txt")// Run PageRankval ranks = graph.pageRank(0.0001).vertices// Join the ranks with the usernamesval users = sc.textFile("file:///usr/local/Spark/data/graphx/users.txt").map { line =>val fields = line.split(",")(fields(0).toLong, fields(1))}val ranksByUsername = users.join(ranks).map {case (id, (username, rank)) => (username, rank)}// Print the resultprintln(ranksByUsername.collect().mkString("\n"))}
}

连通分支算法

连通分支算法使用最小编号的顶点来标记每个连通分支。

在一个社会网络,连通图近似簇。这里我们计算一个连通分支实例,所使用的数据集和PageRank一样。

import org.apache.log4j.{Level,Logger}
import org.apache.spark._
import org.apache.spark.graphx.GraphLoader
object SimpleGraphX {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("SimpleGraphX").setMaster("local")val sc = new SparkContext(conf)// Load the edges as a graph// Load the graph as in the PageRank exampleval graph = GraphLoader.edgeListFile(sc, "file:///usr/local/Spark/data/graphx/followers.txt")// Find the connected componentsval cc = graph.connectedComponents().vertices// Join the connected components with the usernamesval users = sc.textFile("file:///usr/local/Spark/data/graphx/users.txt").map { line =>val fields = line.split(",")(fields(0).toLong, fields(1))}val ccByUsername = users.join(cc).map {case (id, (username, cc)) => (username, cc)}// Print the resultprintln(ccByUsername.collect().mkString("\n"))}
}

三角形计算算法

在图中,如果一个顶点有两个邻接顶点并且顶点与顶点之间有边相连,那么我们就可以把三个顶点归于一个三角形。

这里通过计算社交网络图中三角形的数量,所采用的数据集同样和PageRank的数据集一样。

import org.apache.log4j.{Level,Logger}
import org.apache.spark._
import org.apache.spark.graphx.{GraphLoader,PartitionStrategy}
object SimpleGraphX {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("SimpleGraphX").setMaster("local")val sc = new SparkContext(conf)// Load the edges in canonical order and partition the graph for triangle countval graph = GraphLoader.edgeListFile(sc, "file:///usr/local/Spark/data/graphx/followers.txt", true).partitionBy(PartitionStrategy.RandomVertexCut)// Find the triangle count for each vertexval triCounts = graph.triangleCount().vertices// Join the triangle counts with the usernamesval users = sc.textFile("file:///usr/local/Spark/data/graphx/users.txt").map { line =>val fields = line.split(",")(fields(0).toLong, fields(1))}val triCountByUsername = users.join(triCounts).map { case (id, (username, tc)) =>(username, tc)}// Print the resultprintln(triCountByUsername.collect().mkString("\n"))}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux中关于vim相关操作的练习题,实操训练,配有相应的答案提示

3月25日vim相关操作 题目1: 1)将/etc/hosts网络配置文件复制到/tmp/mydir下; 2)使用vim编辑器打开hosts文件,按i进入编辑模式,将本机IP地址和主机名(client1)映射。 3)按下esc键回到命令模式…

uniapp输入框事件(防抖)

一、描述 在输入框输入内容或者说输入关键词的时候,往往都要进行做防抖处理。如果不做防抖,你输入什么,动态绑定的数据就会保持一致。这样不好吗,同步获取。有个业务场景,如果是搜索框,你每次一个字符&…

【Linux 驱动基础】Linux platform平台设备驱动

# 前置知识 总线驱动模型简介: 总线是处理器与一个或者多个设备之间的通道,在设备模型中,所有的设备都是通过总线相连,当然也包括虚拟的 platform 平台总线。 总线驱动模型中有三要素: 1. 总线 /*** struct bus_ty…

结构体嵌套、大小及位域

1.语法 struct 结构体名 { struct 结构体名 成员名&#xff1b; }&#xff1b; 2.结构体大小 例如&#xff1a; #include <stdio.h>struct A {char a;int b;char c;char d; }; int main() {printf("%d\n",sizeof(struct A));return 0; } 打印出的结果 : 12…

librdkafka的简单使用

文章目录 摘要kafka是什么安装环境librdkafka的简单使用生产者消费者 摘要 本文是Getting Started with Apache Kafka and C/C的中文版&#xff0c; kafka的hello world程序。 本文完整代码见仓库&#xff0c;这里只列出producer/consumer的代码 kafka是什么 本节来源&#…

【VMware Workstation】公司所有主机和虚拟机ip互通,以及虚拟机目录迁移

文章目录 1、场景2、环境3、实战3.1、所有主机和虚拟机ip互通Stage 1 : 【虚拟机】设置为桥接模式Stage 2 : 【虚拟机】设置ipStage 3 : 【路由器】ARP 静态绑定MACStage 3-1 ping 路由器 ipStage 3-2 【静态绑定】虚拟机查看mac地址Stage 3-3 【静态绑定】路由器ARP 静态绑定 …

更高效稳定 | 基于ACM32 MCU的编程直流电源应用方案

随着电子设备的多样化发展&#xff0c;面对不同的应用场景&#xff0c;需要采用特定的供电电源。因此&#xff0c;在电子产品的开发测试过程中&#xff0c;必不可少使用编程直流电源来提供测试电压&#xff0c;协助完成初步的开发测试过程。 编程直流电源概述 编程直流电源结构…

浅谈C语言编译与链接

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 翻译环境和运行环境 在ANSI C&#xff08;标准 C&#xff09;的任何一种实现中&#xff0c;存在两个不同的环境。 第1种是翻译环境&#xff0c;在这个…

IntelliJ IDEA中遇到的“cannot access java.lang.String“错误及其解决方案(day8)

intelliJ 今天遇到使用intelliJ遇到了一个新错误&#xff0c;有问题就解决问题是一个程序员最基本的修养&#xff0c;如下&#xff1a; 在上面的代码中&#xff0c;我使用了this.这个关键字&#xff0c;发现出现了以上问题&#xff0c;找了一些资料&#xff0c;不是很明白&am…

LDO(低压差线性稳压器)

一般压差较小的降压模块就用LDO 一、CJ78L05 芯片描述&#xff1a;可实现VCC转5v 二、ME6215C33M5G 芯片描述&#xff1a;可实现VCC转3.3V 三、AMS1117-3.3&#xff08;a&#xff09; 芯片描述&#xff1a;一般用来实现5V转3.3V AMS1117-3.3&#xff08;b&#xff09; 芯…

理解JVM:从字节码到程序运行

大家好&#xff0c;我是程序员大猩猩。 今天我们来讲一下JVM&#xff0c;好多面试者在面试的时候&#xff0c;都会被问及JVM相关知识。那么JVM到底是什么&#xff0c;要理解它到底是出于什么原因&#xff1f; JVM俗称Java虚拟机&#xff0c;它是一个抽象的计算机&#xff0c;…

chrome安装vue插件 vue-devtools

第一步&#xff1a;获取 Vue DevTools 插件 你只要打开 Chrome 网上应用店&#xff0c;搜索 “Vue.js Devtools”&#xff0c;找到官方插件并点击添加至 Chrome&#xff08;通常显示为“添加至 Chrome”按钮&#xff09;。 第二步&#xff1a;安装插件 如果你点击了添加至 Chro…

蓝桥杯2017年第十三届省赛真题-承压计算

一、题目 承压计算 X星球的高科技实验室中整齐地堆放着某批珍贵金属原料。 每块金属原料的外形、尺寸完全一致&#xff0c;但重量不同。 金属材料被严格地堆放成金字塔形。 7 5 8 7 8 8 …

腾讯云4核8g服务器多少钱?2024轻量和CVM收费价格表

2024年腾讯云4核8G服务器租用优惠价格&#xff1a;轻量应用服务器4核8G12M带宽646元15个月&#xff0c;CVM云服务器S5实例优惠价格1437.24元买一年送3个月&#xff0c;腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图&#xff1a; 腾讯云4核8G服务器优惠价格 轻…

5.6 物联网RK3399项目开发实录-Android开发之(wulianjishu666)

物联网入门到项目实干案例下载&#xff1a; https://pan.baidu.com/s/1fHRxXBqRKTPvXKFOQsP80Q?pwdh5ug --------------------------------------------------------------------------------------------------------------------------------- U-Boot 使用 前言 RK U-B…

ARM_dsp_math函数使用

使用说明 下载地址: https://github.com/ARM-software/CMSIS-DSP/tree/main 准备工作&#xff1a; 添加全局宏&#xff1a;USE_HAL_DRIVER,STM32F427xx,__CC_ARM,__TARGET_FPU_VFP,__FPU_PRESENT,ARM_MATH_CM4注释或者删除stm32f427xx.h中关于的__FPU_PRESENT定义 --没操作也成…

AMD本月发布的成本优化型Spartan UltraScale+ FPGA系列

随着 FPGA 在更多应用中的使用&#xff0c;AMD 推出了最新的成本、功耗与性能平衡的系列产品。为了扩展其可编程逻辑产品组合&#xff0c;AMD最近推出了最新的成本优化型 Spartan FPGA 系列。随着 FPGA 应用于越来越多的产品和设备&#xff0c;设计人员可能经常发现自己正在寻找…

Git,GitHub,Gitee,GitLab 四者有什么区别?

目录 1. Git 2. GitHub 3. Gitee 4. GitLab 5. 总结概括 1. Git Git 是一个版本管理工具&#xff0c;常应用于本地代码的管理&#xff0c;下载完毕之后&#xff0c;我们可以使用此工具对本地的资料&#xff0c;代码进行版本管理。 下载链接&#xff1a; Git - Downlo…

Eclipse+Java+Swing实现斗地主游戏

一. 视频演示效果 java斗地主源码演示 ​ 二.项目结构 代码十分简洁&#xff0c;只有简单的7个类&#xff0c;实现了人机对战 素材为若干的gif图片 三.项目实现 启动类为Main类&#xff0c;继承之JFrame&#xff0c;JFrame 是 Java Swing 库中的一个类&#xff0c;用于创建窗…

【计算机图形学】3D Implicit Transporter for Temporally Consistent Keypoint Discovery

对3D Implicit Transporter for Temporally Consistent Keypoint Discovery的简单理解 文章目录 1. 现有方法限制和文章改进2. 方法2.1 寻找时间上一致的3D特征点2.1.1 3D特征Transporter2.1.2 几何隐式解码器2.1.3 损失函数 2.2 使用一致特征点的操纵 1. 现有方法限制和文章改…