Spark GraphX實例(1)

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

Spark GraphX是一個分散式的圖處理框架。社交網路中,用戶與用戶之間會存在錯綜複雜的聯繫,如微信、QQ、微博的用戶之間的好友、關註等關係,構成了一張巨大的圖,單機無法處理,只能使用分散式圖處理框架處理,Spark GraphX就是一種分散式圖處理框架。 1. POM文件 在項目的pom文件中 ...


Spark GraphX是一個分散式的圖處理框架。社交網路中,用戶與用戶之間會存在錯綜複雜的聯繫,如微信、QQ、微博的用戶之間的好友、關註等關係,構成了一張巨大的圖,單機無法處理,只能使用分散式圖處理框架處理,Spark GraphX就是一種分散式圖處理框架。

1. POM文件

在項目的pom文件中加上Spark GraphX的包:

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-graphx_2.10</artifactId>
            <version>1.6.0</version>
        </dependency>

2. 設置運行環境

    // 設置運行環境
    val conf = new SparkConf().setAppName("Simple GraphX").setMaster("spark://master:7077").setJars(Seq("E:\\Intellij\\Projects\\SimpleGraphX\\SimpleGraphX.jar"))
    val sc = new SparkContext(conf)

3. 圖的構造

圖是由若幹頂點和邊構成的,Spark GraphX裡面的圖也是一樣的,所以在初始圖之前,先要定義若幹的頂點和邊:

    // 頂點
    val vertexArray = Array(
      (1L,("Alice", 38)),
      (2L,("Henry", 27)),
      (3L,("Charlie", 55)),
      (4L,("Peter", 32)),
      (5L,("Mike", 35)),
      (6L,("Kate", 23))
    )

    //
    val edgeArray = Array(
      Edge(2L, 1L, 5),
      Edge(2L, 4L, 2),
      Edge(3L, 2L, 7),
      Edge(3L, 6L, 3),
      Edge(4L, 1L, 1),
      Edge(5L, 2L, 3),
      Edge(5L, 3L, 8),
      Edge(5L, 6L, 8)
    )

然後再利用點和邊生成各自的RDD:

    //構造vertexRDD和edgeRDD
    val vertexRDD:RDD[(Long,(String,Int))] = sc.parallelize(vertexArray)
    val edgeRDD:RDD[Edge[Int]] = sc.parallelize(edgeArray)

最後利用兩個RDD生成圖:

    // 構造圖
    val graph:Graph[(String,Int),Int] = Graph(vertexRDD, edgeRDD)

4. 圖的屬性操作

Spark GraphX圖的屬性包括:

(1)graph.vertices:圖中的所有頂點;

(2)graph.edges:圖中所有的邊;

(3)graph.triplets:由三部分組成,源頂點,目的頂點,以及兩個頂點之間的邊;

(4)graph.degrees:圖中所有頂點的度;

(5)graph.inDegrees:圖中所有頂點的入度;

(6)graph.outDegrees:圖中所有頂點的出度;

對這些屬性的操作,直接上代碼:

    //圖的屬性操作
    println("*************************************************************")
    println("屬性演示")
    println("*************************************************************")
    // 方法一
    println("找出圖中年齡大於20的頂點方法之一:")
    graph.vertices.filter{case(id,(name,age)) => age>20}.collect.foreach {
      case(id,(name,age)) => println(s"$name is $age")
    }

    // 方法二
    println("找出圖中年齡大於20的頂點方法之二:")
    graph.vertices.filter(v => v._2._2>20).collect.foreach {
      v => println(s"${v._2._1} is ${v._2._2}")
    }

    // 邊的操作
    println("找出圖中屬性大於3的邊:")
    graph.edges.filter(e => e.attr>3).collect.foreach(e => println(s"${e.srcId} to ${e.dstId} att ${e.attr}"))
    println

    // Triplet操作
    println("列出所有的Triples:")
    for(triplet <- graph.triplets.collect){
      println(s"${triplet.srcAttr._1} likes ${triplet.dstAttr._1}")
    }
    println

    println("列出邊屬性>3的Triples:")
    for(triplet <- graph.triplets.filter(t => t.attr > 3).collect){
      println(s"${triplet.srcAttr._1} likes ${triplet.dstAttr._1}")
    }
    println

    // Degree操作
    println("找出圖中最大的出度,入度,度數:")
    def max(a:(VertexId,Int), b:(VertexId,Int)):(VertexId,Int) = {
      if (a._2>b._2) a else b
    }
    println("Max of OutDegrees:" + graph.outDegrees.reduce(max))
    println("Max of InDegrees:" + graph.inDegrees.reduce(max))
    println("Max of Degrees:" + graph.degrees.reduce(max))
    println

 運行結果:

Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
17/05/22 20:45:35 INFO Slf4jLogger: Slf4jLogger started
17/05/22 20:45:35 INFO Remoting: Starting remoting
17/05/22 20:45:35 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://[email protected]:53375]
*************************************************************
屬性演示
*************************************************************
找出圖中年齡大於20的頂點方法之一:
Peter is 32
Alice is 38
Charlie is 55
Mike is 35
找出圖中年齡大於20的頂點方法之二:
Peter is 32
Alice is 38
Charlie is 55
Mike is 35
找出圖中屬性大於3的邊:
3 to 2 att 7
5 to 3 att 8
5 to 6 att 8

列出所有的Triples:
Henry likes Alice
Henry likes Peter
Charlie likes Henry
Charlie likes Kate
Peter likes Alice
Mike likes Henry
Mike likes Charlie
Mike likes Kate

列出邊屬性>3的Triples:
Charlie likes Henry
Mike likes Charlie
Mike likes Kate

找出圖中最大的出度,入度,度數:
Max of OutDegrees:(5,3)
Max of InDegrees:(1,2)
Max of Degrees:(2,4)

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

-Advertisement-
Play Games
更多相關文章
  • 當前(2017年5月22日 )React Native開發相當火爆,但是搜索下來,沒有最新版本0.44集成的教程,因此嘗試了一下如何集成到Android原生工程中去。本篇旨在記錄出現的問題以及應對方式。 一、集成的過程比較簡單,按照教程一步一步來即可: 中文版教程:http://reactnativ ...
  • Schematic : Precondition : 1. Vbat 1.8V 2. Plugin adapter 3. Preloader doesn't enable GPIO_CHG_EN Origin : 做個小實驗, 手機上的假電池給 1.8V, 接上adapter, 照原理,手機應該停在 ...
  • Gradle是一種依賴管理工具,基於Froovy語言,面向Java應用為主,它拋棄了基於xml的各種繁瑣配置,取而代之的是一種基於Groovy的內部領域特定(DSL)語言。 ...
  • 解決方案步驟如下:第一步給網站根目錄添加如下數據許可權,如圖1所示 圖1 第二步,右鍵我的電腦=》管理=》打開組,給administrator添加NETWORK SERVICE 許可權,如圖2所示 如圖2所示 最後一步 重新啟動IIS ...
  • 檢查使用共用表空間的表 最近接手一臺新的資料庫機器,發現某些庫某些表沒有ibd文件只有frm文件,而ibdata1文件一共有20G+,估計是使用了共用表空間 存放在ibdata1文件里 於是寫了一個腳本,檢查實例下哪些庫哪些表使用了共用表空間,原理是如果有frm文件而沒有ibd文件就認為是使用了共用 ...
  • 本文轉載自http://www.jianshu.com/p/d7665192aaaf 說起MySQL的查詢優化,相信大家積累一堆技巧:不能使用SELECT *、不使用NULL欄位、合理創建索引、為欄位選擇合適的數據類型..... 你是否真的理解這些優化技巧?是否理解其背後的工作原理?在實際場景下性能 ...
  • mysql多實例監控實錄 系統環境: cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) 內核版本: uname -r 3.10.0-514.el7.x86_64 docker版本: docker -v Docker versio ...
  • MySQL學習筆記-子查詢和連接 使客戶端進入gbk編碼方式顯示: mysql> SET NAMES gbk; 1.子查詢 子查詢的定義: 子查詢(Subquery)是指出現在其他SQL語句內的SELECT子句。 例如: SELECT * FROM t1 WHERE col1 = (SELECT c ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...