Spark- GraphFrames如何在connectedComponents中使用组件ID

时间:2018-01-23 11:30:02

标签: scala apache-spark dataframe dataset spark-graphx

我试图找到所有已连接的组件(在此示例中,4连接到100,2连接到200等)我使用val g2 = GraphFrame(v2, e2) val result2 = g2.connectedComponents.run()并返回具有组件ID的节点。我的问题是,如何使用此ID查看所有连接的节点?如何找出这个id属于哪个节点?非常感谢。我对此很陌生。

val v2 = sqlContext.createDataFrame(List(
         ("a",1),
        ("b", 2),
        ("c", 3),
        ("d", 4),
       ("e", 100),
        ("f", 200),
        ("g", 300),
         ("h", 400)
  )).toDF("nodes", "id")


val e2= sqlContext.createDataFrame(List(
         (4,100, "friend"),
         (2, 200, "follow"),
         (3, 300, "follow"),
         (4, 400, "follow"),
         (1, 100, "follow"),
          (1,400, "friend")

  )).toDF("src", "dst", "relationship")

在此示例中,我希望看到下面的连接

----+----+
|   4|   400|
|   4|   100|
|   1|   400|
|   1|   100|

这就是现在的结果 (1,1),(2,2),(3,1),(4,1),(100,1)(200,2)(300,3)(400,1)。我怎么看到所有的连接?

1 个答案:

答案 0 :(得分:2)

您已声明" a"," b"," c" ...是您图表的节点ID,但后来使用了1 ,2,3 ...作为定义边的节点ID。

您应该在创建顶点数据帧时将节点ID更改为数字:1,2,3 ..将该列命名为" id" :

val v2 = sqlContext.createDataFrame(List(
         ("a",1),
        ("b", 2),
        ("c", 3),
        ("d", 4),
       ("e", 100),
        ("f", 200),
        ("g", 300),
         ("h", 400)
  )).toDF("nodes", "id")

这应该会给你想要的结果。