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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...