0

我有一个用户:用户RDD[(Long, Vertex)]集合。我想在我的 Vertex 对象之间创建链接。规则是:如果两个顶点在一个选定的属性中具有相同的值 - 称之为 prop1,则存在链接。

我的问题是如何检查同一集合中的每一对。如果我做:

val rels = users.map(
  x => users.map(y => if(x._2.prop1 == y._2.prop1){(x._1, y._1)}))

我得到了一个RDD[RDD[Any]]而不是一个RDD[(Long, Long)]预期的图表工作

4

1 回答 1

1

首先,您不能从另一个动作或变换开始变换动作,更不用说创建嵌套了RDDs。所以你根本不可能得到RDD[RDD[Any]]

您在这里需要的很可能是一个简单的连接,大致相当于这样的东西 whereT是 的类型property1

val pairs: RDD[(T, Long)] = users.map{ case (id, v) => (v.prop1, id) }
val links: RDD[(Long, Long)] = pairs
  .join(pairs)  // join by a common property, equivalent to INNER JOIN in SQL
  .values  // drop properties
  .filter{ case (v1, v2) => v1 != v2 }  // filter self-links
于 2015-11-19T10:27:37.603 回答