Spark GraphX實例(2)

来源:http://www.cnblogs.com/mstk/archive/2017/05/27/6914545.html
-Advertisement-
Play Games

5. 圖的轉換操作 圖的轉換操作主要有以下的方法: (1) Graph.mapVertices():對圖的頂點進行轉換,返回一張新圖; (2) Graph.mapEdges():對圖的邊進行轉換,返回一張新圖。 代碼: 運行結果: 6. 圖的結構操作 圖的結構操作主要有: (1) Graph.sub ...


5. 圖的轉換操作

圖的轉換操作主要有以下的方法:

(1) Graph.mapVertices():對圖的頂點進行轉換,返回一張新圖;

(2) Graph.mapEdges():對圖的邊進行轉換,返回一張新圖。

代碼:

    // 轉換操作
    println("*************************************************************")
    println("轉換操作")
    println("*************************************************************")
    println("頂點的轉換操作,頂點age+10:")
    graph.mapVertices{case(id,(name,age)) => (id,(name,age+10))}.vertices.collect.foreach(v => println(s"${v._2._1} is${v._2._2}"))

    println("邊的轉換操作,邊的屬性*2:")
    graph.mapEdges(e => e.attr*2).edges.collect.foreach(e => println(s"${e.srcId} to ${e.dstId} att ${e.attr}"))

運行結果:

*************************************************************
轉換操作
*************************************************************
頂點的轉換操作,頂點age+1:
4 is(Peter,33)
6 is(Kate,24)
2 is(Henry,28)
1 is(Alice,39)
3 is(Charlie,56)
5 is(Mike,36)
邊的轉換操作,邊的屬性*3:
2 to 1 att 15
2 to 4 att 6
3 to 2 att 21
3 to 6 att 9
4 to 1 att 3
5 to 2 att 9
5 to 3 att 24
5 to 6 att 24

6. 圖的結構操作

圖的結構操作主要有:

(1) Graph.subgraph():求圖的子圖,從圖中選出一些頂點,這些頂點以及相應的邊就構成了一張子圖。

代碼:

    println("*************************************************************")
    println("結構操作")
    println("*************************************************************")
    println("頂點年紀>25的子圖:")
    val subGraph = graph.subgraph(vpred = (id,vd) => vd._2 >= 25)
    println("子圖所有頂點:")
    subGraph.vertices.collect.foreach(v => println(s"${v._2._1} is ${v._2._2}"))
    println
    println("子圖所有邊:")
    subGraph.edges.collect.foreach(e => println(s"${e.srcId} to ${e.dstId} att ${e.attr}"))

 

從圖中選出年齡大於等於25歲的頂點。運行結果:

*************************************************************
結構操作
*************************************************************
頂點年紀>25的子圖:
子圖所有頂點:
Peter is 32
Henry is 27
Alice is 38
Charlie is 55
Mike is 35

子圖所有邊:
2 to 1 att 5
2 to 4 att 2
3 to 2 att 7
4 to 1 att 1
5 to 2 att 3
5 to 3 att 8

7. 圖的連接操作

圖的連接操作主要有以下方法:

(1) Graph.joinVertices(Graph):對於兩個圖中都存在的頂點進行轉換;

(2) Graph.outerJoinVertices(Graph):和(1)類似,區別在於一個頂點只在前一個圖中有,後一個圖裡面沒有,就將這個頂點的屬性設為Null。

代碼:

    // 連接操作
    println("*************************************************************")
    println("連接操作")
    println("*************************************************************")
    case class User(name:String, age:Int, inDeg:Int, outDeg:Int)

    // 創建一個新圖,頂點VD的數據類型為User,並從graph做類型轉換
    val initialUserGraph:Graph[User, Int] = graph.mapVertices{case(id,(name,age)) => User(name,age,0,0)}

    // initialUserGraph與inDegrees,outDegrees(RDD)進行連接,並修改initialUserGraph中inDeg值,outDeg值
    val userGraph = initialUserGraph.outerJoinVertices(initialUserGraph.inDegrees){
      case(id, u, inDegOpt) => User(u.name, u.age, inDegOpt.getOrElse(0), u.outDeg)}.outerJoinVertices(initialUserGraph.outDegrees){
      case(id, u, outDegOpt) => User(u.name, u.age, u.inDeg, outDegOpt.getOrElse(0))
    }
    println("連接圖的屬性:")
    userGraph.vertices.collect.foreach(v => println(s"${v._2.name} inDeg:${v._2.inDeg} outDeg:${v._2.outDeg}"))

    println("出度和入度相同的人員:")
    userGraph.vertices.filter{
      case(id, v) => v.inDeg==v.outDeg
    }.collect.foreach{
      case(id, property) => println(property.name)
    }
    println

其實是一個圖分別和自己的入度圖、出度圖進行連接操作,以便把頂點的出度和入度寫入頂點的屬性。

運行結果:

*************************************************************
連接操作
*************************************************************
連接圖的屬性:
Peter inDeg:1 outDeg:1
Kate inDeg:2 outDeg:0
Henry inDeg:2 outDeg:2
Alice inDeg:2 outDeg:0
Charlie inDeg:1 outDeg:2
Mike inDeg:0 outDeg:3
出度和入度相同的人員:
Peter
Henry

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近在做iOS系統通訊錄備份到伺服器,並且可以從伺服器中下載備份文件恢復到手機的功能,部分實現細節記錄如下。 將iphone系統通訊錄生成.vcf文件 運行後系統沙盒Document目錄下會生成contacts.vcf文件,上傳至伺服器即可。 通訊錄恢復: 從伺服器下載contents.vcf文件, ...
  • 用as開發過程中遇見問題app閃退 log如下圖: 解決: File—Settings: 點擊Apply—OK重新運行即可 ...
  • Shader學習筆記 例子: Mesh Filter : 存儲一個Mesh(網格,模型的網格,就是模型的由哪些三角面組成,組成一個什麼樣子的模型,三角面的一些頂點信息) Mesh Renderer:用來渲染一個模型的外觀,就是樣子, 按照 mesh給它皮膚,給它顏色 通過Material(材質)控制 ...
  • 一、簡介 1. 定位的實際應用場景: 導航:去任意陌生的地方 周邊:找餐館、找酒店、找銀行、找電影院等 2. 涉及技術: Core Location 框架:用於地理定位。(單純的定位,不需要顯示地圖) 常用類:以CL首碼開頭 CLLocation:(結構體類型)經緯度 CLLocationManag ...
  • 今天將項目從ionic2 升級為ionic3 ,ionic serve 運行在網頁上無任何錯誤。 但是將項目打包成為android apk 卻一直卡在啟動頁面 白屏,進不去的情況。後來在android studio 控制台看到這個錯誤提示:Uncaught SyntaxError Use of co ...
  • 一,效果圖。 二,工程圖。 三,代碼。 RootViewController.h RootViewController.m ...
  • 《NoSQL精粹》為考慮是否可以使用和如何使用NoSQL資料庫的企業提供了可靠的決策依據。它由世界軟體開發大師和軟體開發“教父”Martin Fowler與Jolt生產效率大獎圖書作者Pramod J. Sadalage共同撰寫。書中全方位比較了關係型資料庫與NoSQL資料庫的異同;分別以Riak、 ...
  • 一概述 1.什麼是Mybatis? ⑴Mybatis是Apache的一個開源項目,原名為ibatis,移植到google code後改名為Mybatis,目前遷移到了Github。 ⑵Mybatis是一個支持定製化SQL、存儲過程以及高級映射的優秀持久層框架,避免了幾乎所有的JDBC代碼、手動設置參 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...