首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在spark-graphx中获得两跳邻居?

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

Stack Overflow用户
提问于 2016-10-08 12:31:50
回答 1查看 1.6K关注 0票数 7

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

代码语言:javascript
复制
#src->dest
a  -> b  34
a  -> c  23
b  -> e  10
c  -> d  12
d  -> c  12
c  -> d  11

我想让所有两个跳邻居都像这样:

代码语言:javascript
复制
a  -> e  44
a  -> d  34

我的图表非常大,所以我想优雅而高效地完成它。有没有人有什么建议,在图形实例上做这件事的最佳方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2016-10-08 20:29:04

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

代码语言:javascript
复制
graphframes:graphframes:0.2.0-spark2.0-s_2.11

conf/spark-defaults.conf中设置为spark.jars.packages,或将其作为spark-submit--packages参数传递。

接下来,您应该将Graph转换为GraphFrame。您可以使用fromGraphX方法:

代码语言:javascript
复制
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的语言中的模式。两跳可以表示为:

代码语言:javascript
复制
val pattern = "(x1) - [a] -> (x2); (x2) - [b] -> (x3)"

其中(_)表示节点,[_]边。与模式匹配的路径:

代码语言:javascript
复制
val paths = graphFrame.find(pattern)

select字段:

代码语言:javascript
复制
paths.select($"x1.attr", $"x3.attr", $"a.attr" + $"b.attr").show()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39928697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档