Spark Task no serializable con la función de ventana de retraso

Me di cuenta de que después de usar una función de ventana sobre un DataFrame si llamo a un mapa () con una función, Spark devuelve una excepción "Tarea no serializable" Este es mi código:

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

Y este es el seguimiento de pila:

org.apache.spark.SparkException: tarea no serializable en org.apache.spark.util.ClosureCleaner $ .ensureSerializable (ClosureCleaner.scala: 304) en org.apache.spark.util.ClosureCleaner $ .org $ apache $ spark $ util $ ClosureCleaner $ clean (ClosureCleaner.scala: 294) en org.apache.spark.util.ClosureCleaner $ .clean (ClosureCleaner.scala: 122) en org.apache.spark.SparkContext.clean (SparkContext.scala: 2055) en org.apache.spark.rdd.RDD $ anonfun $ map $ 1.apply (RDD.scala: 324) en org.apache.spark.rdd.RDD $ anonfun $ map $ 1.apply (RDD.scala: 323) en ... y más Causado por: java.io.NotSerializableException: org.apache.spark.sql.Column Serialization stack: - objeto no serializable (clase: org.apache.spark.sql.Column, valor: 'lag (name, 1, nulo) definición de windows (apellido, marco no especificado)) - campo (clase: $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC, nombre: lag_result, tipo: class org.apache.spark .sql.Column) ... y más

Respuestas a la pregunta(1)

Su respuesta a la pregunta