Задача Spark не сериализуется с помощью функции задержки окна
Я заметил, что после того, как я использую функцию Window над DataFrame, если я вызываю map () с функцией, Spark возвращает исключение «Задача не сериализуема». Это мой код:
val hc:org.apache.spark.sql.hive.HiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
import hc.implicits._
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._
def f():String = "test"
case class P(name:String,surname:String)
val lag_result:org.apache.spark.sql.Column = lag($"name",1).over(Window.partitionBy($"surname"))
val lista:List[P] = List(P("N1","S1"),P("N2","S2"),P("N2","S2"))
val data_frame:org.apache.spark.sql.DataFrame = hc.createDataFrame(sc.parallelize(lista))
df.withColumn("lag_result", lag_result).map(x => f)
//df.withColumn("lag_result", lag_result).map{case x => def f():String = "test";f}.collect // This works
И это трассировка стека:
org.apache.spark.SparkException: задача не сериализуется в org.apache.spark.util.ClosureCleaner $ .ensureSerializable (ClosureCleaner.scala: 304) в org.apache.spark.util.ClosureCleaner $ .org $ apache $ spark $ util $ ClosureCleaner $ clean (ClosureCleaner.scala: 294) в org.apache.spark.util.ClosureCleaner $ .clean (ClosureCleaner.scala: 122) в org.apache.spark.SparkContext.clean (SparkContext.scala: 2055) в org.apache.spark.rdd.RDD $ anonfun $ map $ 1.apply (RDD.scala: 324) в org.apache.spark.rdd.RDD $ anonfun $ map $ 1.apply (RDD.scala: 323) в ... и многое другое Причина: java.io.NotSerializableException: org.apache.spark.sql.Column Стек сериализации: - объект не сериализуем (класс: org.apache.spark.sql.Column, значение: 'lag (name, 1, NULL) Определение окон (фамилия, UnspecifiedFrame)) - поле (класс: $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC, имя: lag_result, тип: класс org.apache.spark .sql.Column) ... и многое другое