GraphX学习笔记——可视化

本文介绍了使用SparkX和GraphStream处理社交关系图的过程。首先创建了包含人物和社交关系的简单图数据集,然后利用SparkX加载这些数据并构建图。接着将图数据导入GraphStream进行可视化展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先自己造了一份简单的社交关系的图

第一份是人物数据,id和姓名,person.txt

1 孙俪
2 邓超
3 佟大为
4 冯绍峰
5 黄晓明
6 angelababy
7 李冰冰
8 范冰冰

 第二份是社交关系数据,两个人的id和社交关系,social.txt

1 丈夫 2
2 妻子 1
1 搭档 3
3 同学 4
3 好友 5
5 好友 3
5 妻子 6
5 好友 7
7 好友 8

 使用SparkX和GraphStream来处理数据

package graphx

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.graphx._
import org.apache.spark.rdd.RDD
import org.graphstream.graph.implementations.{AbstractEdge, SingleGraph, SingleNode}

/**
  * Created by common on 18-1-22.
  */
object GraphxLearning {

  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setAppName("GraphX").setMaster("local")
    val sc = new SparkContext(conf)

    val path1 = "input/graphx/person.txt"
    val path2 = "input/graphx/social.txt"


    // 顶点RDD[顶点的id,顶点的属性值]
    val users: RDD[(VertexId, (String, String))] = sc.textFile(path1).map { line =>
      val vertexId = line.split(" ")(0).toLong
      val vertexName = line.split(" ")(1)
      (vertexId, (vertexName, vertexName))
    }

    // 边RDD[起始点id,终点id,边的属性(边的标注,边的权重等)]
    val relationships: RDD[Edge[String]] = sc.textFile(path2).map { line =>
      val arr = line.split(" ")
      val edge = Edge(arr(0).toLong, arr(2).toLong, arr(1))
      edge
    }

    // 默认(缺失)用户
    //Define a default user in case there are relationship with missing user
    val defaultUser = ("John Doe", "Missing")

    //使用RDDs建立一个Graph(有许多建立Graph的数据来源和方法,后面会详细介绍)
    val srcGraph = Graph(users, relationships, defaultUser)

    val graph: SingleGraph = new SingleGraph("graphDemo")

    //    load the graphx vertices into GraphStream
    for ((id, name) <- srcGraph.vertices.collect()) {
      val node = graph.addNode(id.toString).asInstanceOf[SingleNode]
      node.addAttribute("ui.label", name._1)
    }

    //    load the graphx edges into GraphStream edges
    for (Edge(x, y, relation) <- srcGraph.edges.collect()) {
      val edge = graph.addEdge(x.toString ++ y.toString, x.toString, y.toString, true).asInstanceOf[AbstractEdge]
      edge.addAttribute("ui.label", relation)
    }

    graph.setAttribute("ui.quality")
    graph.setAttribute("ui.antialias")

    graph.display()


  }

}

可视化的结果,该图数据节点数很少,本来想尝试一份百万节点的数据,结果遇到了爆内存的问题

后来发现爆内存是肯定的,而且显示的点太多也不太利于debug,解决方法是使用subgraph()方法来对图进行裁剪以减小节点和边的数量

### 使用 TensorBoard 可视化神经网络结构 Graph 为了有效使用 TensorBoard 来可视化 TensorFlow 中构建的神经网络结构,可以遵循以下方法: #### 准备工作 确保安装了最新版本的 TensorFlow 和 TensorBoard。可以通过 Python 的包管理器 pip 安装或更新这两个库。 ```bash pip install --upgrade tensorflow tensorboard ``` #### 构建模型并启用日志记录 当定义好 TensorFlow 计算图之后,在代码中加入必要的操作以便于后续能够通过 TensorBoard 查看图形表示。这通常涉及到创建 `tf.summary.FileWriter` 实例并将计算图写入到指定的日志目录下[^1]。 ```python import tensorflow as tf # 假设已经有一个简单的线性回归模型 'model' log_dir = "/tmp/tensorflow_logs" writer = tf.summary.create_file_writer(log_dir) with writer.as_default(): tf.summary.graph(tf.function(model).get_concrete_function().graph) ``` 这段代码会把当前默认图保存至 `/tmp/tensorflow_logs` 文件夹里供 TensorBoard 加载分析。 #### 启动 TensorBoard 并查看结果 完成上述设置后,启动 TensorBoard 服务指向之前配置好的日志路径即可在线浏览可视化的计算图和其他统计数据。 ```bash tensorboard --logdir=/tmp/tensorflow_logs ``` 打开浏览器访问 http://localhost:6006 即可看到包含有计算图在内的多种类型的图表展示页面[^2]。 #### 教程资源推荐 对于初学者来说,跟随一些具体的案例练习是非常有益处的。比如参考莫烦在 B 站发布的教程视频,其中包含了详细的步骤指导以及实际演示过程,非常适合用来入门学习如何利用 TensorBoard 进行神经网络结构的可视化[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值