GraphX 实现K-Core

背景

graphx实现k-core比较简单,参考淘宝技术部之前的文章,已经给出了一个代码片段,基本上改改就可以定制自己的需求了。

code

import org.apache.spark._
import org.apache.spark.graphx._
import org.apache.spark.storage.StorageLevel
import org.apache.spark.graphx.lib._

// load the graph
val friendsGraph = GraphLoader.edgeListFile(sc, "data/friends.txt.", false, 512, StorageLevel.MEMORY_ONLY, StorageLevel.DISK_ONLY)

var degreeGraph = friendsGraph.outerJoinVertices(friendsGraph.degrees) {
  (vid, vd, degree) => degree.getOrElse(0)
}.cache()

val kNum = 200
var lastVerticeNum: Long = degreeGraph.numVertices
var thisVerticeNum: Long = -1
var isConverged = false
val maxIter = 10
var i = 1
while (!isConverged && i <= maxIter) {
  val subGraph = degreeGraph.subgraph(
    vpred = (vid, degree) => degree >= kNum
  ).cache()

  degreeGraph = subGraph.outerJoinVertices(subGraph.degrees) {
    (vid, vd, degree) => degree.getOrElse(0)
  }.cache()

  thisVerticeNum = degreeGraph.numVertices
  if (lastVerticeNum == thisVerticeNum) {
    isConverged = true
    println("vertice num is " + thisVerticeNum + ", iteration is " + i)
  } else {
    println("lastVerticeNum is " + lastVerticeNum + ", thisVerticeNum is " + thisVerticeNum + ", iteration is " + i + ", not converge")
    lastVerticeNum = thisVerticeNum
  }
  i += 1
}
// do something to degreeGraph

拼的主要是子图的计算速度。

全文完 :)

时间: 2024-12-02 02:22:47

GraphX 实现K-Core的相关文章

提高Java程序内存效率

程序 我们都知道Java程序之所以被广大程序员青睐,很大的一个原因是因为Java有GC(垃圾收集),不用程序员花很大的精力来解决内存释放和泄漏问题.而这些问题总是C/C++程序员需要花很大精力来认真地面对的. 问题总是双面的,GC给我们带来了很大的快乐,释放了程序员很多的精力和时间,但是在某些时候也会给我们带来一些小小的麻烦.Java里的Object并非交给GC去释放就可高枕无忧了,下面从JDK1.4的Demo中Java2D的Memory Monitor说起. 先看看Memory Monitor

什么是Core i5

  Core i5(中文:酷睿 i5,核心代号:Lynnfield)处理器是英特尔的一款产品,是Intel Core i7的派生中低级版本,同样建基于Intel Nehalem微架构.与Core i7支持三通道存储器不同,Core i5只会集成双通道DDR3存储器控制器.另外,Core i5会集成一些北桥的功能,将集成PCI-Express控制器.接口亦与Core i7的LGA 1366不同,Core i5采用全新的LGA 1156.处理器核心方面,代号Lynnfiled,采用45纳米制程的Co

GraphX 图数据建模和存储

背景 简单分析一下GraphX是怎么为图数据建模和存储的. 入口 可以看GraphLoader的函数, def edgeListFile( sc: SparkContext, path: String, canonicalOrientation: Boolean = false, numEdgePartitions: Int = -1, edgeStorageLevel: StorageLevel = StorageLevel.MEMORY_ONLY, vertexStorageLevel: S

Core i7-4770K的详细性能

新品发布前总能看到一些规格.性能方面的偷跑,但大多都是零零碎碎的,关键时刻还得看权威大站.Tom's Hardware今天放出猛料,公布了Intel Haswell处理器家族旗舰型号Core i7-4770K的详细性能,基本可以对下代平台有个整体的印像了. 当然了,测试的不是零售版,而是一颗工程样品,但对比早期样品(和早期驱动)已经有了很大的改善,稳定性良好,不出意外的话不会和最终上市的成品有太大区别. 首先是Haswell家族桌面首发型号的完整规格表: 各项数据都和之前日本PCWatch披露的

GraphX实现N度关系

背景 本文给出了一个简单的计算图中每个点的N度关系点集合的算法,也就是N跳关系. 之前通过官方文档学习和理解了一下GraphX的计算接口. N度关系 目标: 在N轮里,找到某一个点的N度关系的点集合. 实现思路: 1. 准备好边数据集,即"1 3", "4, 1" 这样的点关系.使用GraphLoader 的接口load成Graph 2. 初始化每个Vertice的属性为空Map 3. 使用aggregateMessages把VerticeID和totalRound

Linux core dump file 详解

 原文地址      1. 前言: 有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的. 但这不像编译错误一样会提示到文件->行, 而是没有任何信息, 使得我们的调试变得困难起来.     2. gdb: 有一种办法是, 我们用gdb的step, 一步一步寻找. 这放在短小的代码中是可行的, 但要让你step一个上万行的代码, 我想你会从此厌恶程序员这个名字, 而把他叫做调试员. 我们还有更好的办法, 这就是core file.    3.

段错误调试神器 - Core Dump详解

一.前言: 有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的. 但这不像编译错误一样会提示到文件某一行, 而是没有任何信息, 使得我们的调试变得困难起来.  gdb: 有一种办法是, 我们用gdb的step, 一步一步寻找. 这放在短小的代码中是可行的, 但要让你step一个上万行的代码, 我想你会从此厌恶程序员这个名字, 而把他叫做调试员. 我们还有更好的办法, 这就是core file.  ulimit: 如果想让系统在信号中断造成的错

Spark Core源码分析: RDD基础

RDD RDD初始参数:上下文和一组依赖 abstract class RDD[T: ClassTag]( @transient private var sc: SparkContext, @transient private var deps: Seq[Dependency[_]] ) extends Serializable 以下需要仔细理清: A list of Partitions Function to compute split (sub RDD impl) A list of De

asp.net core集成kindeditor实现图片上传功能_实用技巧

本文为大家分享了asp.net core 如何集成kindeditor并实现图片上传功能的具体方法,供大家参考,具体内容如下 准备工作 1.visual studio 2015 update3开发环境 2.net core 1.0.1 及以上版本 目录 新建asp.net core web项目 下载kindeditor 增加图片上传控制器 配置kindeditor参数 代码下载 新建asp.net core web项目 新建一个asp.net core项目,这里命名为kindeditor 选中w

让我们 Core 在一起:ASP.NET Core &amp; .NET Core

Microsoft .NET 自 2002 年发行 v1.0 以来,已经过了近 14 个年头,在这 14 年里面,.NET 日渐成熟并成为 Microsoft 的重要开发平台之一,只要是在 Windows 平台上的相关应用,几乎都可以使用 .NET 以及所属的 C# 及 VB 语言来开发,虽然它一直没有真正的跨平台 (也可以说有,但只跨 Windows 生态圈的平台),不过 .NET 与 Visual Studio 的完美整合所产生的生产力,也是软件产业无法否认的强大,Visual Studio