2015-03-10 3 views
3

--- Edit ---Vertex Наследование недвижимости - Graphx Scala Спарк

Моя главная проблема в том, что я не понимаю этот пункт в документации Graphx:

В некоторых случаях может быть желательным иметь вершины с разными типами свойств в одном и том же графе. Это может быть достигнуто путем наследования. Например, для моделирования пользователей и продукты, как двудольный граф, мы могли бы сделать следующее:

class VertexProperty() 
case class UserProperty(val name: String) extends VertexProperty 
case class ProductProperty(val name: String, val price: Double) extends VertexProperty 
// The graph might then have the type: 
var graph: Graph[VertexProperty, String] = null 

В приведенном выше случае данного РДД-х каждого UserProperty и ProductProperty и в RDD из EdgeProperty, как можно создать график типа Граф [VertexProperty, String]. Я ищу пример.


ответ

0

Это Scala вопрос, просто преобразовать расширенный тип для абстрактного типа с использованием asInstanceOf, например:

val variable1: RDD[UserProperty] = {..your code..} 
val variable2: RDD[ProductProperty] = {..your code..} 
val result: RDD[VertexProperty] = SparkContext.union(
variable1.asInstanceOf[VertexProperty], 
variable2.asInstanceOf[VertexProperty]) 

То же самое касается края свойства используйте

val edge: EdgeProperty = Edge(srcID, dstID, variable.asInstanceOf(EdgeProperty)) 
0

Вы можете использовать сообщение, которое может быть объединено, например Iterable [YourClass]. Однако вы должны учитывать, что размер такого рода слияний может стать очень большим.

2

Это будет поможет вам создать двудольный граф, где свойство вершин поможет вам понять разные категории классов.

// интерфейс высокого уровня ИЛИ VertexProperty

trait Node { def getVertexID : Long } 

class UserNode(sID: String, sname : String, sAge) extends Node with Serializable { } 

class ProductNode(sID: String, sNO : String, sdoe : String) extends Node with Serializable{ } 

// загрузки данных

val users: RDD[Node] = sc.textFile("users.txt") 
           .map { row => val cols = row.split(",") 
             (new UserNode(cols(0), cols(1), cols(2)) 
            } 

val products: RDD[Node] = sc.textFile("products.txt") 
           .map { row => val cols = row.split(",") 
             (new ProductNode(cols(0), cols(1), cols(3))) 
           } 

// Регистрация обе РДУ

val nodes : RDD[Node] = users.++(products) 
Смежные вопросы