Scala foreach循环内的Spark NullPointerException
我有RDD,我想循环一下。我喜欢这样:Scala foreach循环内的Spark NullPointerException,scala,foreach,nullpointerexception,apache-spark,rdd,Scala,Foreach,Nullpointerexception,Apache Spark,Rdd,我有RDD,我想循环一下。我喜欢这样: pointsMap.foreach({ p => val pointsWithCoordinatesWithDistance = pointsMap.leftOuterJoin(xCoordinatesWithDistance) pointsWithCoordinatesWithDistance.foreach(println) println("---") }) 但是,NullPointerException正在发生: java.la
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)
...
java.lang.NullPointerException
位于org.apache.spark.rdd.rdd.(rdd.scala:125)
位于org.apache.spark.rdd.CoGroupedRDD.(CoGroupedRDD.scala:69)
位于org.apache.spark.rdd.pairddfunctions.cogroup(pairddfunctions.scala:651)
位于org.apache.spark.rdd.pairddfunctions.leftOuterJoin(pairddfunctions.scala:483)
位于org.apache.spark.rdd.pairddfunctions.leftOuterJoin(pairddfunctions.scala:555)
...
pointsMap
和xCoordinationwithDistance
都在foreach之前初始化,并包含元素。不在foreach循环内leftOuterJoin
也可以工作。有关我的代码的完整版本,请参见不要在某个RDD运算符的函数中使用RDD。当您想同时操作多个RDD时,需要使用适当的RDD运算符,例如join
,因此,我不能在其他RDD函数(如foreah)中使用RDD函数(如join)?如果是,那么我如何重写代码?另外,你所说的“适当的RDD运算符”是什么意思?你不应该在RDD函数中使用RDD。我不明白为什么您需要将点map.leftOuterJoin(xcoordinationswithdistance)
放在foreach
中?您可以编写完整的代码以便我理解您的意图吗?我只在foreach
中看到了println
,这让我很困惑。我对DBSCAN
一无所知。但是如果您确实需要foreach
循环,可以使用pointsMap.collect().foreach
。确保您有足够的内存在驱动程序中存储点map
。