Sono nuovo di Scala. Come mai la funzione "mappa" non è serializzabile? Come renderlo serializzabile? Ad esempio, se il mio codice è come qui di seguito:La mappa non può essere serializzabile in scala?
val data = sc.parallelize(List(1,4,3,5,2,3,5))
def myfunc(iter: Iterator[Int]) : Iterator[Int] = {
val lst = List(("a", 1),("b", 2),("c",3), ("a",2))
var res = List[Int]()
while (iter.hasNext) {
val cur = iter.next
val a = lst.groupBy(x => x._1).mapValues(_.size)
//val b= a.map(x => x._2)
res = res ::: List(cur)
}
res.iterator
}
data.mapPartitions(myfunc).collect
Se io commento dalla riga
val b= a.map(x => x._2)
Il codice restituisce un'eccezione:
org.apache.spark.SparkException: Task not serializable
Caused by: java.io.NotSerializableException: scala.collection.immutable.MapLike$$anon$2
Serialization stack:
- object not serializable (class: scala.collection.immutable.MapLike$$anon$2, value: Map(1 -> 3))
- field (class: $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC, name: a, type: interface scala.collection.immutable.Map)
Grazie mille.
Per quanto posso dire, non è riproducibile su Spark 1.2.0 - 1.5.0. Potrebbe fornire alcuni dettagli di configurazione? Come si esegue questo codice? – zero323
Ciao zero323, ho eseguito questo codice direttamente nella shell di Scala con Spark 1.5. Ho anche eseguito il codice in Scala Shell di Spark 1.0.1 e lo stesso problema esiste. – Carter
Sospetto che questo non sia il vero codice che dà l'errore? Il tuo 'lst' è davvero una semplice lista nel codice reale? O un altro RDD? –