Apache spark 火花图-FOF的实现 如何在Spark GraphX中找到FOF?

Apache spark 火花图-FOF的实现 如何在Spark GraphX中找到FOF?,apache-spark,spark-dataframe,spark-graphx,Apache Spark,Spark Dataframe,Spark Graphx,在Cypher中,我有一个疑问: MATCH (f:Friend)-[:friend_of]-(Friend)-[:friend_of]-(c:Friend) WHERE c.name STARTS WITH "T" RETURN f.name AS Friend1 , c2.name as Friend2 另一个例子来自 基本内容:此查询在返回“John”和找到的任何朋友的朋友之前,先查找一个名为“John”和“John’s”的用户的朋友(尽管不是他的直接朋友) Spa

在Cypher中,我有一个疑问:

MATCH (f:Friend)-[:friend_of]-(Friend)-[:friend_of]-(c:Friend)
WHERE c.name STARTS WITH "T"
RETURN f.name AS Friend1 , c2.name as Friend2
另一个例子来自

基本内容:此查询在返回“John”和找到的任何朋友的朋友之前,先查找一个名为“John”和“John’s”的用户的朋友(尽管不是他的直接朋友)

  • Spark GraphX的替代实现是什么
  • 如何将此查询实现为Spark GraphX
这是火花图X中的示例:

// Create an RDD for the vertices
val users: RDD[(VertexId, (String, String))] =
  sc.parallelize(Array((3L, ("rxin", "student")), (7L, ("jgonzal", "postdoc")),
                       (5L, ("franklin", "prof")), (2L, ("istoica", "prof")),
                       (4L, ("peter", "student"))))

// Create an RDD for edges
val relationships: RDD[Edge[String]] =
  sc.parallelize(Array(Edge(3L, 7L, "friend_of"),   Edge(5L, 3L, "friend_of"),
                       Edge(2L, 5L, "friend_of"),   Edge(5L, 7L, "friend_of"),
                       Edge(4L, 0L, "friend_of"),   Edge(5L, 0L, "friend_of")))

// Define a default user in case there are relationship with missing user
val defaultUser = ("John Doe", "Missing")

// Build the initial Graph
val graph = Graph(users, relationships, defaultUser)


// Where do we go, Where do we go now..?!

我看到的图形中的所有示例都在相同的概念中
Node->Rel->Node
。但是如何做
Node->Rel->Node->Rel->Node

你能详细说明你的
Cypher
查询到底做什么吗?基本上它是什么:我的查询返回所有朋友的朋友,他们的名字以T.dupe开头。对不起,它没有重复,在它只有两个步骤FoF,我需要实现三个步骤FoF。区别在于,图中的所有示例都位于同一个概念节点->关系节点->节点中。但是如何使Node->Rel->Node->Rel->Node具有类似的功能,称为motif finding。
// Create an RDD for the vertices
val users: RDD[(VertexId, (String, String))] =
  sc.parallelize(Array((3L, ("rxin", "student")), (7L, ("jgonzal", "postdoc")),
                       (5L, ("franklin", "prof")), (2L, ("istoica", "prof")),
                       (4L, ("peter", "student"))))

// Create an RDD for edges
val relationships: RDD[Edge[String]] =
  sc.parallelize(Array(Edge(3L, 7L, "friend_of"),   Edge(5L, 3L, "friend_of"),
                       Edge(2L, 5L, "friend_of"),   Edge(5L, 7L, "friend_of"),
                       Edge(4L, 0L, "friend_of"),   Edge(5L, 0L, "friend_of")))

// Define a default user in case there are relationship with missing user
val defaultUser = ("John Doe", "Missing")

// Build the initial Graph
val graph = Graph(users, relationships, defaultUser)


// Where do we go, Where do we go now..?!