1

私はRDDを持っていて、それをループしたいです。私はこれが好きです:

pointsMap.foreach({ p =>
  val pointsWithCoordinatesWithDistance = pointsMap.leftOuterJoin(xCoordinatesWithDistance)
  pointsWithCoordinatesWithDistance.foreach(println)
  println("---")
})

ただし、NullPointerException が発生しています。

java.lang.NullPointerException
    at org.apache.spark.rdd.RDD.<init>(RDD.scala:125)
    at org.apache.spark.rdd.CoGroupedRDD.<init>(CoGroupedRDD.scala:69)
    at org.apache.spark.rdd.PairRDDFunctions.cogroup(PairRDDFunctions.scala:651)
    at org.apache.spark.rdd.PairRDDFunctions.leftOuterJoin(PairRDDFunctions.scala:483)
    at org.apache.spark.rdd.PairRDDFunctions.leftOuterJoin(PairRDDFunctions.scala:555)
...

pointsMapとの両方xCoordinatesWithDistanceが foreach の前に初期化され、要素が含まれています。foreach ループ内でなくてleftOuterJoinも機能します。私のコードの完全なバージョンについては、 https://github.com/timasjov/spark-learning/blob/master/src/DBSCAN.scalaを参照してください。

4

1 に答える 1

3

一部の RDD 演算子の関数で RDD を使用しないでください。など、複数の RDD を一緒に操作する場合は、適切な RDD 演算子を使用する必要がありますjoin

于 2014-10-27T07:16:41.543 に答える