【问题标题】:Spark- GraphFrames How to use the component ID in connectedComponentsSpark-GraphFrames如何在connectedComponents中使用组件ID
【发布时间】:2018-07-02 05:02:39
【问题描述】:

我正在尝试查找所有连接的组件(在此示例中,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)。如何查看所有连接?

【问题讨论】:

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


    【解决方案1】:

    您已将“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")
    

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

    【讨论】:

    • 好的,谢谢!但结果显示 (100,1) (200,2) (300,3)(400,1)。如何查看所有连接?
    • 根据定义,运行 connectedComponents() 会为图中的所有连接组件提供一个 id(这是组件的编号最小的顶点)。这也是这里正在发生的事情。 result2 数据框有 component 列,表示相应节点 ID 的组件 ID。我希望这会有所帮助,请随时提出更多问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2019-01-02
    • 2019-04-17
    • 1970-01-01
    相关资源
    最近更新 更多