sessionIdList è di tipo:NullPointerException in Scala Spark, sembra essere causato da tipo di raccolta?
scala> sessionIdList res19: org.apache.spark.rdd.RDD [String] = MappedRDD [17] distinti in: 30
Quando si tenta di eseguire qui sotto code :
val x = sc.parallelize(List(1,2,3))
val cartesianComp = x.cartesian(x).map(x => (x))
val kDistanceNeighbourhood = sessionIdList.map(s => {
cartesianComp.filter(v => v != null)
})
kDistanceNeighbourhood.take(1)
ricevo un'eccezione:
14/05/21 16:20:46 ERROR Executor: Exception in task ID 80
java.lang.NullPointerException
at org.apache.spark.rdd.RDD.filter(RDD.scala:261)
at $line94.$read$$iwC$$iwC$$iwC$$iwC$$anonfun$1.apply(<console>:38)
at $line94.$read$$iwC$$iwC$$iwC$$iwC$$anonfun$1.apply(<console>:36)
at scala.collection.Iterator$$anon$11.next(Iterator.scala:328)
at scala.collection.Iterator$$anon$10.next(Iterator.scala:312)
at scala.collection.Iterator$class.foreach(Iterator.scala:727)
Tuttavia se uso:
0.123.val l = sc.parallelize(List("1","2"))
val kDistanceNeighbourhood = l.map(s => {
cartesianComp.filter(v => v != null)
})
kDistanceNeighbourhood.take(1)
Poi viene visualizzato un'eccezione
La differenza tra i due frammenti di codice è che nel primo pezzo sessionIdList è di tipo:
res19: org.apache.spark.rdd.RDD[String] = MappedRDD[17] at distinct at <console>:30
e in secondo frammento di "l" è di tipo
scala> l
res13: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[32] at parallelize at <console>:12
Perché si verifica questo errore?
Devo convertire sessionIdList in ParallelCollectionRDD per risolvere questo problema?
Riesci a rendere il tuo codice autonomo? –
@IvanVergiliev tutto il codice tranne un ParallelCollectionRDD popolato è incluso per ricreare l'eccezione. Non so come creare un popolato ParallelCollectionRDD –