【问题标题】:How to visualize graph with network in zeppelin?如何在 zeppelin 中使用网络可视化图形?
【发布时间】:2020-08-17 13:54:59
【问题描述】:

我想在 zeppelin 中使用 %network 可视化我的图表。我通过读取 JSON 文件定义了节点和边。

val nodes = spark.read.option("multiline","true").json("/opt/nodes.json")
val edges = spark.read.option("multiLine","true").json("/opt/edges.json")
val graph = GraphFrame(nods,edges)

我已经阅读了documentation,但它对文件不利。 我不知道如何可视化它。

【问题讨论】:

    标签: apache-spark apache-spark-sql apache-zeppelin graphframes visualize


    【解决方案1】:

    以下代码,虽然理论上不是很通用,但可视化来自 GraphFrame 对象的数据(不要在巨型图上使用它)。但是,尽管它生成正确的数据,在 UI 中可见,但在可视化过程中存在 JavaScript 错误(我尝试过 0.9.0-preview1) - 我创建了ZEPPELIN-4793 来处理它。

    import org.graphframes._
    import org.apache.spark.sql.functions._
    
      def graphframeToNetworkText(g: GraphFrame, vertexLabel: String, edgeLabel: String): String = {
        val v = g.vertices
        val vDataFields = v.schema.fields.map{_.name}.filterNot(_ == "id").map(col(_))
        val vJson = v.select(col("id"), lit(vertexLabel).as("label"),
          struct(vDataFields: _*).as("data"))
          .toJSON.collect.mkString("[",", ","]")
        val e = g.edges
        val eDataFields = e.schema.fields.map{_.name}
          .filterNot(x => x == "src" || x == "dst").map(col(_))
        val timeUUID = udf(() => java.util.UUID.randomUUID().toString)
        val eJson = e.select(col("src").as("source"),
          col("dst").as("target"),
          lit(edgeLabel).as("label"),
          struct(eDataFields: _*).as("data"))
          .withColumn("id", timeUUID())
          .toJSON.collect.mkString("[",", ","]")
    
        val sb = new StringBuilder
        sb.append("%network {")
          .append("\n\"nodes\": ")
          .append(vJson)
          .append(",\n\"edges\": ")
          .append(eJson)
          .append(",\n\"directed\": false,\n\"types\":[\"")
          .append(edgeLabel)
          .append("\"],\n\"labels\":{\"")
          .append(vertexLabel)
          .append("\": \"#3071A9\"}\n}")
    
        sb.toString()
      }
    

    可以这样称呼:

    val g: GraphFrame = examples.Graphs.friends
    print(graphframeToNetworkText(g, "person", "rel"))
    

    【讨论】:

      猜你喜欢
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 2016-01-22
      • 2012-02-09
      • 2019-02-27
      • 2018-12-27
      相关资源
      最近更新 更多