第一個GraphX程式

來源:互聯網
上載者:User

標籤:graphx   spark   

   程式功能:收集頂點指向的鄰置中所在地

/* * 找出每個頂點所指向的鄰置中所在的地區 */import org.apache.spark.SparkContextimport org.apache.spark.SparkContext._import org.apache.spark.SparkConfimport scala.collection.mutable.Mapimport org.apache.spark._import org.apache.spark.graphx._import org.apache.spark.rdd.RDDobject testApp{    def main(args:Array[String]){        val conf = new SparkConf().setAppName("testApp")        val sc = new SparkContext(conf)        val graph = GraphLoader.edgeListFile(sc, "/home/spark/spark/graphx/data/followers.txt")//載入邊時頂點是邊上出現的點        val users = sc.textFile("/home/spark/spark/graphx/data/users.txt").map { line =>            val fields = line.split(",")            (fields(0).toLong,(fields(1),fields(2)))//解析頂點資料:ID(一定轉成Long型),姓名,地區        }        val myGraph=Graph.apply(users,graph.edges)//重構圖,頂點資料以users為準        val vertices=myGraph.mapReduceTriplets[Map[String,Int]](//收集每個定點指向的鄰居所在的地區            triplet=>Iterator((triplet.srcId,Map[String,Int](triplet.dstAttr._2->1))),//Map function單向發送訊息給有向邊的源頂點            (a,b)=>{//Reduce function彙集訊息                var myMap=Map[String,Int]()                for((k,v)<-a){                    if(b.contains(k))                    {                        var t=a(k)+b(k)                        myMap+=(k->t)                    }                    else                        myMap+=(k->a(k))                }                myMap //返回彙集的結果            }        )        vertices.collect.foreach(a=>print(a+"\n"))//列印收集的鄰居所在地    }}


users.txt頂點資料:ID,姓名,地區

1,BarackObama,American2,ladygaga,American3,John,American4,xiaoming,Beijing6,Hanmeimei,Beijing7,Polly,American8,Tom,American


followers.txt邊資料:只有源頂點和目標頂點,中間以空格隔開,多餘的列無用,如:2 1 other 有3列資料,但是graphx只會讀取前兩列

2 14 11 26 37 37 66 73 7

結果:

(4,Map(American -> 1))(6,Map(American -> 2))(2,Map(American -> 1))(1,Map(American -> 1))(3,Map(American -> 1))(7,Map(American -> 1))


工程目錄結構:

./test.sbt./src./src/main./src/main/scala./src/main/scala/testApp.scala


test.sbt內容:

name := "test Project"version := "1.0"scalaVersion := "2.10.4"libraryDependencies += "org.apache.spark" %% "spark-core" % "1.0.1"libraryDependencies += "org.apache.spark" %% "spark-graphx" %"1.0.1"resolvers += "Akka Repository" at "http://repo.akka.io/releases/"



命令列執行如下進行編譯:

sbt package



命令列執行如下向叢集提交(開啟了叢集為前提),這裡我的工程建在spark安裝目錄下apps/testApp下,因此下面開頭是../../

 ../../bin/spark-submit --class "testApp" --master local[4] target/scala-2.10/test-project_2.10-1.0.jar


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.