2015-10-20 21 views
3

我可以通過GraphX API使用vertexRDDedgeRDD構建圖表,在那裏沒有問題。即:如何在GraphX中創建二分圖

val graph: Graph[(String, Int), Int] = Graph(vertexRDD, edgeRDD) 

不過,我不知道從哪裏開始,如果我想使用兩個獨立的vertexRDD的,而不只是一個(二部圖)。例如,一個包含購物者和產品頂點的圖。

我的問題很廣泛,所以我不期待一個詳細的例子,而是一個提示或推動正確的方向。任何建議將不勝感激。

+0

如果你的頂點包含相同類型的,爲什麼不'聯盟()'兩個頂點RDD的,並提交您的圖形? –

+0

我不確定這是否是您要查找的內容,但是您可以聯合()兩個具有頂點的RDD(注意您需要唯一的VertexId),然後創建連接購物者頂點和產品頂點的邊。如果你願意,你也可以通過它們的'VertexId'連接兩個圖形(或圖形和頂點的RDD)。除非您提供更多詳細信息,否則很難說出最適合您的是什麼。 – lpiepiora

回答

3

例如,以用戶和產品型號爲二分圖,我們不妨做到以下幾點:

trait VertexProperty 
case class UserProperty(val name: String) extends VertexProperty 
case class ProductProperty(val name: String, 
    val price: Double) extends VertexProperty 

val users: RDD[(VertexId, VertexProperty)] = sc.parallelize(Seq(
    (1L, UserProperty("user1")), (2L, UserProperty("user2")))) 

val products: RDD[(VertexId, VertexProperty)] = sc.parallelize(Seq(
    (1001L, ProductProperty("foo", 1.00)), (1002L, ProductProperty("bar", 3.99)))) 

val vertices = VertexRDD(users ++ products) 

// The graph might then have the type: 
val graph: Graph[VertexProperty, String] = null 
+1

是的,它的工作原理。我希望你不介意做小的改動,但是這個'VertexProperty()類似乎很奇怪。我知道,官方文檔,但... – zero323

+0

沒問題。請做! – eliasah

+0

感謝您的反饋。我現在已經創建了兩個獨立的VertexRDD的: VRDDShopper:VertexRDD [字符串] VRDDProduct:VertexRDD [(字符串,雙人間)] 現在我假設我需要將它們分配給其各自的case類,UserProperty&ProductProperty。 在這一點上,我打了一個概念牆。我需要通過您建議的類結構以某種方式將我的VertexRDD轉換爲圖[VD,ED]。如果案例類沒有定義爲VertexRDD,我該怎麼做? 再一次,我對不具體的道歉,但這是我在概念上掙扎的東西。 –