Мне нужно прочитать несколько файлов csv и преобразовать несколько столбцов из строки в Double.Confused with Spark serilization
код, как:
def f(s:String):Double = s.toDouble
def readonefile(path:String) = {
val data = for {
line <- sc.textFile(path)
arr = line.split(",").map(_.trim)
id = arr(33)
} yield {
val countings = ((9 to 14) map arr).toVector map f
id -> countings.toVector
}
data
}
Если я пишу toDouble
явно (например функцию f
в коде), искра бросает ошибку java.io.IOException
или java.lang.ExceptionInInitializerError
.
Однако, если я изменю countings
к
val countings = ((9 to 14) map arr).toVector map (_.toDouble)
Тогда все работает отлично.
Является функцией f
сериализуемым?
EDIT:
Некоторые люди говорит, что это то же самое, как Task not serializable: java.io.NotSerializableException when calling function outside closure only on classes not objects Но почему это не бросить Task not serializable
исключение?
Scala версия 2,10
Спарк версия 1.3.1
Окружающая среда: пряжа-клиент
возможно дубликат [задача не сериализуемый: java.io.NotSerializableException при вызове функции вне закрытия только на классах не объекты] (http://stackoverflow.com/questions/22592811/task-not-serializable-java-io-notserializableexception-when-calling-function-ou) – maasg
@maasg, хотя они похожи. Но как объяснить сообщение об ошибке, которое оно выбрасывает. Я ожидал увидеть NotSerializableException. – worldterminator
Я немного путаюсь с основным циклом, который вы делаете, можете ли вы объяснить, что вы пытаетесь выполнить? – Holden