【问题标题】:Creat graph from specific vertices graphx spark从特定顶点创建图形 graphx spark
【发布时间】:2020-11-06 13:36:53
【问题描述】:

我想用火车数据集构建一个图表。这是我的代码:

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)&&(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 作为顶点?

【问题讨论】:

    标签: scala apache-spark spark-graphx


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-28
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多