我有一个链接:JdbcRDD[String],其中包含以下形式的链接:
{"bob,michael"}
分别为每个链接的源和目标。我可以拆分每个字符串以检索唯一标识源节点和目标节点的字符串。然后我有一个 users:RDD[(Long, Vertex)] ,它包含我图中的所有顶点。每个顶点都有一个 nameId:String 属性和一个 nodeId:Long 属性。
我想从 stringId 中检索 nodeId,但不知道如何实现这个逻辑,在 Scala 和 Spark 中都是相当新的。我被这段代码困住了:
val reflinks = links.map { x =>
// split each line in an array
val row = x.split(',')
// retrieve the id using the row(0) and row(1) values
val source = users.filter(_._2.stringId == row(0)).collect()
val dest = users.filter(_._2.stringId == row(1)).collect()
// return last value
Edge(source(0)._1, dest(0)._1, "referral")
// return the link in Graphx format
Edge(ids(0), ids(1), "ref")
}
有了这个解决方案,我得到:
org.apache.spark.SparkException: RDD transformations and actions can only be invoked by the driver, not inside of other transformations; for example, rdd1.map(x => rdd2.values.count() * x) is invalid because the values transformation and count action cannot be performed inside of the rdd1.map transformation. For more information, see SPARK-5063.