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

apache graphx合并/组合多个图

吕鸿文
2023-03-14

我是Apache GraphX的新手,我想看看是否可以在GraphX中进行图形合并/合并。我想做的是说我有下面的2个图

graph1:     A —1—> B —1—> C —1—> D
            |
             —1—> E —1—> F

graph2:    A —1—> B —1—> C
           |
            —1—> G

merge result: A —2—> B —2—> C —1—> D
              |
               —1—> E —1—> F
              |
               —1—> G

共有1个答案

程成天
2023-03-14

您需要基于顶点和边的并集创建一个新的图,然后使用groupEdges():

import org.apache.spark.graphx._
import org.apache.spark.graphx.PartitionStrategy.RandomVertexCut

val verts1 = sc.parallelize(Seq(
    (1L,"A"),
    (2L,"B"),
    (3L,"C"),
    (4L,"D"),
    (5L,"E"),
    (6L,"F")))

val edges1 = sc.parallelize(Seq(
    Edge(1L,2L,1),
    Edge(2L,3L,1),
    Edge(3L,4L,1),
    Edge(1L,5L,1),
    Edge(5L,6L,1)))

val graph1 = Graph(verts1, edges1)

val verts2 = sc.parallelize(Seq(
    (1L,"A"),
    (2L,"B"),
    (3L,"C"),
    (7L,"G")))

val edges2 = sc.parallelize(Seq(
    Edge(1L,2L,1),
    Edge(2L,3L,1),
    Edge(1L,7L,1)))

val graph2 = Graph(verts2, edges2)

val graph: Graph[String,Int] = Graph(
    graph1.vertices.union(graph2.vertices),
    graph1.edges.union(graph2.edges)
).partitionBy(RandomVertexCut).
   groupEdges( (attr1, attr2) => attr1 + attr2 )

如果您现在查看这个新图的边缘,您可以看到合并结果:

scala> graph.edges.collect
res0: Array[org.apache.spark.graphx.Edge[Int]] = 
      Array(Edge(1,2,2), Edge(2,3,2), Edge(1,5,1), 
            Edge(5,6,1), Edge(1,7,1), Edge(3,4,1))
 类似资料:
  • 问题内容: 我需要将2个多维数组合并在一起以创建一个新数组。 这两个数组是从和创建的,我需要将它们彼此关联。 数组#1 阵列#2 新阵列 我正在使用的当前代码有效,但仅适用于数组中的最后一项。 我想通过循环该函数在每个循环中擦除新数组。 我该如何纠正? 问题答案: []会将其附加到数组而不是覆盖。

  • 我有索引,其中每个文档都有这样的结构: 我需要计算每个演员对应的电影数量(演员可以在actor_1_name、actor_2_name或actor_3_name字段中) 这3个字段的映射是: 有没有一种方法,我可以聚合的结果,可以结合所有3个演员领域的条款,并给出一个单一的聚合。 目前,我正在为每个actor字段创建单独的聚合,并通过我的JAVA代码将这些不同的聚合合并成一个。 通过创建不同的聚合

  • 我正在使用RoomDatabase、存储库、Viewmodel和LiveData。区域与网关有1到n的关系,网关与项有1到n的关系。我创建了一个AreaWithGateways实体和一个GatewayWithItems实体。 项可以从一个网关移动到另一个网关,这就是为什么我用Livedata观察它们,以跟踪它们在哪个网关中。我现在的问题是,我发现自己也需要跟踪哪些项目在哪些区域,我不知道如何做到这

  • (注意这不是按字母顺序,蓝莓排在狒狒之前) 当然,只要有一个列表不是空的,我就可以用一个计数器在“superlist”中循环,一个接一个地向resultslist中添加项目: 但最好使用一些优化的LINQ函数来实现这一点。我一直在研究Zip、GroupBy和Aggregate,但无法使它们工作。 那么:有没有一个漂亮的LINQ函数,或者多个函数的组合,可以把它变成漂亮的代码,或者我应该坚持(也许优

  • 操作步骤: ①在"图层管理"模块,选择图层,点击"更多"按钮。 ②点击"复制数据密钥"按钮。 ③弹出"复制数据密钥窗口",点击"复制"按钮。 ④进入想要合并的地图,点击地图右上工具条上的"数据密钥"按钮。 ⑤弹出"导入数据密钥窗口",粘贴刚才复制的密钥,点击"导入"按钮,数据在地图导入成功。 提示: ●复制图层数据参考复制拷贝图层 操作动图: [查看原图]

  • 问题内容: 我有两个像这样的数组: 我想结合这两个数组,使其不包含重复项,并保留其原始键。例如,输出应为: 我已经尝试过了,但是它正在更改其原始键: 有什么办法吗? 问题答案: 只需使用: 那应该解决。因为如果一个键出现多次(例如在您的示例中),则使用字符串键,因此一个键将覆盖具有相同名称的处理键。因为在您的情况下,它们两者都具有相同的值,但这无关紧要,并且还会删除重复项。 更新:我刚刚意识到,P