Я начинаю использовать Spark со Scala в записной книжке dataBricks, однако у меня появляется странная ошибка:
SparkException: Job aborted due to stage failure: Task not serializable: java.io.NotSerializableException: org.apache.spark.sql.Column
Serialization stack:
- object not serializable (class: org.apache.spark.sql.Column, value: t020101)
- writeObject data (class: scala.collection.immutable.List$SerializationProxy)
- object (class scala.collection.immutable.List$SerializationProxy, scala.collection.immutable.List$SerializationProxy@1ccc6944)
- writeReplace data (class: scala.collection.immutable.List$SerializationProxy)
...
Код работает нормально, когда я выполняю функцию округления непосредственно над значениями:
def timeUsageGroupedRound(summed: Dataset[TimeUsageRow]): Dataset[TimeUsageRow] = {
summed.map{
case TimeUsageRow(working, sex, age, primaryNeeds, work, other) =>
TimeUsageRow(working, sex, age, (primaryNeeds* 10).round / 10d, (work* 10).round / 10d, (other* 10).round / 10d)
}
}
val time_Usage_Round_DS = timeUsageGroupedRound(time_Usage_Grouped_DS)
display(time_Usage_Round_DS)
Но, когда я пытаюсь выполнить вспомогательную функцию, я получаю ошибку, упомянутую выше:
def timeUsageGroupedRound(summed: Dataset[TimeUsageRow]): Dataset[TimeUsageRow] = {
def round1(d:Double):Double = (d * 10).round / 10d
summed.map{
case TimeUsageRow(working, sex, age, primaryNeeds, work, other) =>
TimeUsageRow(working, sex, age, round1(primaryNeeds), round1(work), round1(other))
}
}
val time_Usage_Round_DS = timeUsageGroupedRound(time_Usage_Grouped_DS)
display(time_Usage_Round_DS)
Кто-нибудь может объяснить, почему это происходит?Большое спасибо!