2016-07-14 20 views
0

如何在同一個graphX圖形中添加不同類型的邊線。例如,節點A和節點B之間的邊可以具有字符串屬性,並且節點X和節點Y之間的邊可以具有(Int,Int)attr。graphx中不同類型的邊線

有沒有辦法在graphX中實現邊緣繼承? 任何人都可以提供一個例子嗎?

回答

0

使用Graph上的VD and ED類型參數指定圖的頂點和邊類型。只要它們共享一個共同的超類,就可以在不同的邊緣存儲不同類型的邊緣數據。爲此,在構建圖時,請將公共超類作爲ED類型參數傳遞。

在您的示例中,String(Int, Int)的常見超類型爲Any。你可以用這樣的邊緣屬性來構造一個圖形:

val edges = List[Edge[Any]](
    Edge(1, 2, "foo"), 
    Edge(3, 4, (123, 456))) 

Graph.fromEdges(sc.parallelize(edges), 1) 
+0

更進一步說,如果我必須在同一個圖上使用groupEdges,那怎麼辦? –

+0

如果我有一個用戶定義的邊界屬性(比如MySuperEdgeType),它可以被分類到diff edgeTypes中,那麼邊緣的分組將如何進行? 性狀MySuperEdge { DEF edgeType:字符串 } 情況下類SubEdge1(edType:字符串,totalCnt:智力)延伸MySuperEdge { DEF edgeType:字符串= {返回edType} DEF edgeAttrValue:INT = {返回totalCnt} } 情況下類SubEdge2(edType:字符串,銷售:中等,利潤:中等,)延伸MySuperEdge { DEF edgeType:字符串= {返回edType} DEF VAL1:INT = {返回銷售} DEF val2的:INT = {返回利潤} } –

+0

val baseGraph =圖(節點,edgeRDD) 其中edgeRDD是RDD Edge [MySuperEdge] 在這種情況下,創建圖後,我將如何使用groupEdges? –