2016-07-14 5 views
0

Как добавить различные типы ребер в один граф GraphX. Например, и край между узлом A и узлом B может иметь атрибут String, а ребро между узлом X и узлом Y может иметь (Int, Int) attr.Различные типы ребер в графе

Есть ли способ реализовать наследование граней в графике? Может ли кто-нибудь представить пример?

ответ

0

Вершины и типы ребер графа задаются с использованием параметров типа VD and ED на Graph. Вы можете хранить разные типы данных на разных краях, если они имеют общий суперкласс. Для этого передайте общий суперкласс как параметр типа 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, тогда как будет происходить группировка Edges? черта MySuperEdge { Защиту edgeType: String } случай класс SubEdge1 (edType: String, totalCnt: Int) расширяет MySuperEdge { четкости edgeType: String = {вернуть edType} Защиту edgeAttrValue: Int = {возвращение totalCnt} } случай класс SubEdge2 (edType: String, продажа: Int, прибыль: Int,) расширяет MySuperEdge { четкости edgeType: String = {вернуться edType} защиту знач1: Int = {продажи возврата} защиту val2: Int = { return profit} } –

+0

val baseGraph = Graph (nodes, edgeRDD) где edgeRDD - это RDD of Edge [MySuperEdge] В этом случае, после создания графика, как бы я группировал элементы? –