Я пишу собственную реализацию Spark RDD на Scala и отлаживаю свою реализацию с помощью оболочки Spark. Моя цель на данный момент - получить:
customRDD.count
чтобы добиться успеха без исключения. Прямо сейчас я получаю следующее:
15/03/06 23:02:32 INFO TaskSchedulerImpl: Adding task set 0.0 with 1 tasks
15/03/06 23:02:32 ERROR TaskSetManager: Failed to serialize task 0, not attempting to retry it.
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.spark.serializer.SerializationDebugger$ObjectStreamClassMethods$.getObjFieldValues$extension(SerializationDebugger.scala:240)
...
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
at java.io.ObjectStreamClass$FieldReflector.getObjFieldValues(ObjectStreamClass.java:2050)
at java.io.ObjectStreamClass.getObjFieldValues(ObjectStreamClass.java:1252)
... 45 more
Мое внимание привлекает «не удалось сериализовать задачу 0». У меня нет четкого мысленного представления о том, что происходит, я делаю customRDD.count
, и очень неясно, что нельзя сериализовать.
Мой собственный RDD состоит из:
- пользовательский класс RDD
- пользовательский класс раздела
- custom (scala) класс итератора
Моя сессия оболочки Spark выглядит так:
import custom.rdd.stuff
import org.apache.spark.SparkContext
val conf = sc.getConf
conf.set(custom, parameters)
sc.stop
sc2 = new SparkContext(conf)
val mapOfThings: Map[String, String] = ...
myRdd = customRDD(sc2, mapOfStuff)
myRdd.count
... (exception output) ...
Что я хотел бы знать:
- Что должно быть «сериализуемым» в целях создания пользовательского класса RDD?
- Что значит быть «сериализуемым» для Spark? Это похоже на Java "Serializable"?
- Все ли данные, возвращаемые итератором моего RDD (возвращенные методом
compute
), также должны быть сериализуемыми?
Большое спасибо за любые разъяснения по этому вопросу.