当前位置: 首页 > 知识库问答 >
问题:

用GraphX从二部网络生成一部图

顾俊楚
2023-03-14

我正在试验Spark,我对Scala和GraphX是新手。

我正在制作一个由电影和演员组成的双向网络。我的输入是一个空格分隔的文件,每行有一条边,第一列是电影ID,第二列是演员ID,这里是一个摘录:

movie actor
1 1 
2 1 
2 2 
3 1 
3 3 
3 4 
3 5 
3 6 
3 7 
4 1 
val edges: RDD[Edge[String]] = sc.textFile("file:///home/actorMovie").map { line =>
    val fields = line.split(" ")
    Edge(fields(0).toLong, fields(1).toLong)
  }
edges.take(10)
res8: Array[org.apache.spark.graphx.Edge[String]] = Array(Edge(1,1,null), Edge(2,1,null), Edge(2,2,null), Edge(3,1,null), Edge(3,3,null), Edge(3,4,null), Edge(3,5,null), Edge(3,6,null), Edge(3,7,null), Edge(4,1,null))

共有1个答案

于嘉许
2023-03-14

你现在得到的不是二部图。要使它成为一个有效的图,您必须进行大量的转换。做到这一点最简单的方法是使用Dataframes:

val df = spark.read
  .option("delimiter", " ") // if there is a header
  .option("header", "true")
  .csv(path)
  .toDF("movie", "actor")

一旦有了数据自联接和聚合,如下所示:

import org.apache.spark.sql.functions._

val e = df.alias("df1")
  .join(df.alias("df2"), "movie")
  // Sort soruce and destination
  .groupBy(
     greatest("df1.actor", "df2.actor").as("srcId"), 
     least("df1.actor", "df2.actor").as("dstId"))
  .agg(count("*").as("attr"))

这可以转换为graphgraphframe,正如我在这里所展示的,如何获得将DataFrame转换为特定的rdd?。

val dfe = df.select(
  concat(lit("m"), $"movie").as("movie"),
  concat(lit("a"), $"actor").as("actor"))
import graphframes._

val gf = GraphFrame.fromEdges(dfe.toDF("src", "dst"))

然后可以使用消息传递或图模式匹配来查找两个跳邻居。

 类似资料:
  • kubernetes 要求集群内各节点能通过 Pod 网段互联互通,本文档介绍使用 Flannel 在所有节点 (Master、Node) 上创建互联互通的 Pod 网段的步骤。 使用的变量 本文档用到的变量定义如下: $ export NODE_IP=10.64.3.7 # 当前部署节点的 IP $ # 导入用到的其它全局变量:ETCD_ENDPOINTS、FLANNEL_ETCD_PREFIX

  • 网络质量分析师, 1.自我介绍 2.你说有团队协作能力怎么体现的,简单说一下 3.目前投了哪些?回答有互联网公司,银行,运营商 4.感觉你投的公司跨度有点大,说一下 5.北京户口是刚需吗 然后换了个人 1.你是计算机专业的,为什么没什么项目 然后就一直问的为什么没有什么软件的项目经历  但是我就是没做项目,实在没办法 感觉回答的很不好

  • composer network deploy实用程序用于将业务网络档案从本地磁盘部署到Hyperledger Fabric v1.0网络。在使用此命令之前,请阅读部署和更新业务网络文档。 composer network deploy -a digitalPropertyNetwork.bna -A admin -S -c PeerAdmin@hlfv1 -f admincard 选项 com

  • 在部署业务网络定义之前,必须将其打包到业务网络档案(.bna)文件中。composer archive create命令用于从磁盘上的业务网络定义文件夹创建业务网络档案文件。 一旦创建了业务网络档案文件,就可以使用composer runtime install命令和composer network start命令将其部署到运行时。 例如: composer runtime install -n

  • FreeBSD 是目前以高性能网络服务为目的而部署范围最广的操作系统之一。 讨论这些话题的章节包括: 串口通讯 PPP 和以太网上的 PPP 电子邮件 运行网络服务 防火墙 其他进阶网络话题 这些章节主要供您在需要时参考。 不必按特定的顺序来阅读它们, 此外,您开始在网络中使用 FreeBSD 之前也不需要先把它们都读完。

  • Even the smallest project will interact with at the very least two blockchain nodes: One on the developer’s machine, like Ganache or Truffle Develop, and the other representing the network where the d