apache-spark - 如何在 zeppelin 中使用网络可视化图形?
问题描述
我想在 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)
我已经阅读了文档,但它不适合归档。我不知道如何将其可视化。
解决方案
以下代码,虽然理论上不是很通用,但可视化来自 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"))
推荐阅读
- android - Flutter 社交分享插件(facebook / instagram)不起作用
- ruby-on-rails - 使用未确认的帐户登录时,覆盖设计会话控制器以触发“确认您的电子邮件”电子邮件
- c - 如何在不影响性能的情况下实现原始类型的类型安全?
- reactjs - 制作 Service Worker 后,我的网站仅在我删除缓存时加载
- android - 如何在android的firebase recyclerview中播放和暂停音频
- angular - Angular 中的 @SkipSelf 装饰器是什么?
- javascript - 如何使用正则表达式删除字符串 Handlerbar.js 中的 HTML 标记
- reactjs - 防止函数在 React 中被重复调用
- html - 我的键盘快捷键无法保存(VS 代码)
- sql - 将sql连接查询转换为laravel