gpt4 book ai didi

apache-spark - 如何在 spark-graphx 中获得两跳邻居?

转载 作者:行者123 更新时间:2023-12-04 05:15:40 24 4
gpt4 key购买 nike

我使用graphx创建了一个有向图。

#src->dest
a -> b 34
a -> c 23
b -> e 10
c -> d 12
d -> c 12
c -> d 11

我想像这样获得所有两个跃点邻居:
a  -> e  44
a -> d 34

我的图非常大,所以我想优雅高效地完成它。
有没有人对通过图形实例执行此操作的最佳方法有任何建议?

最佳答案

您可以使用 GraphFrames 库简洁地表达这一点。首先,您必须包含所需的包。对于 Spark 2.0 和 Scala 2.11,您可以添加

graphframes:graphframes:0.2.0-spark2.0-s_2.11

spark.jars.packagesconf/spark-defaults.conf或将其传递为 --packages spark-submit 的论据.

接下来你应该转换 GraphGraphFrame .您可以使用 fromGraphX方法:

import org.graphframes.GraphFrame
import org.apache.spark.graphx._

val nodes = sc.parallelize(Seq(
(1L, "a"), (2L, "b"), (3L, "c"), (4L, "d"), (5L, "e")))

val edges = sc.parallelize(Seq(
Edge(1L, 2L, 34), Edge(1L, 3L, 23), Edge(2L, 5L, 10),
Edge(3L, 4L, 12), Edge(3L, 3L, 12), Edge(3L, 5L, 11)))

val graph = Graph(nodes, edges)

val graphFrame = GraphFrame.fromGraphX(graph)
GraphFrame提供 find 方法,该方法采用类似于 Cypher 的语言模式。两跳可以表示为:

val pattern = "(x1) - [a] -> (x2); (x2) - [b] -> (x3)"

哪里 (_)代表节点, [_]边缘。您匹配模式的路径:

val paths = graphFrame.find(pattern)

select领域:

paths.select($"x1.attr", $"x3.attr", $"a.attr" + $"b.attr").show()

关于apache-spark - 如何在 spark-graphx 中获得两跳邻居?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39928697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com