Создание графа из определенных вершин graphx spark

#scala #apache-spark #spark-graphx

#scala #apache-spark #spark-graphx

Вопрос:

Я хотел бы построить график из набора данных поезда. Вот мой код:

 val vertices = df.rdd.flatMap(row => row.getAs[Seq[Row]](3)
        .map(element => (element.getLong(0),element.getBoolean(1),element.getBoolean(2))))

val verticesTrain = vertices.filter{case(id,test,validation) => (test==false)amp;amp;(validation==false)}.map(_._1)

val edges = df.rdd.flatMap(row => row.getAs[Seq[Row]](1)
        .map(element => (element.getLong(0),element.getLong(1))))

val graph = Graph.apply(verticesTrain.map(vertex => (vertex,1.0)),edges.map{case(s,d)=>Edge(s,d,1.0)})
  

Однако, когда я считаю вершины графа, кажется, что у меня есть все вершины, а не только те, что из verticesTrain

 graph.vertices.count()
Out: Long
56944
  
 verticesTrain.count()
Out: Long
44906
  

Как я могу построить граф, используя только verticesTrain в качестве вершин?

Ответ №1:

Использование подграфа сработало :

Эту функцию следует использовать, когда вы хотите отфильтровать из графа либо ребра, либо вершины.

Вот код, который я использовал для этой конкретной проблемы :

 val graph = Graph.apply(verticesTrain.map(vertex => (vertex,1.0)),edges.map{case(s,d)=>Edge(s,d,1.0)})

val filtered = graph.subgraph(vpred = (vid,vd)=>vd!=null.asInstanceOf[Double])

filtered.vertices.count()
Out: Long
44906