Tarefa Spark não serializável com função de janela lag

Notei que, depois de usar uma função Window em um DataFrame, se eu chamar um map () com uma função, o Spark retornará uma exceção "Task not serializable" Este é o meu 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

E este é o rastreamento de pilha:

org.apache.spark.SparkException: tarefa não serializável em org.apache.spark.util.ClosureCleaner $ .ensureSerializable (ClosureCleaner.scala: 304) em org.apache.spark.util.ClosureCleaner $ .org $ apache $ spark $ util $ ClosureCleaner $ clean (ClosureCleaner.scala: 294) em org.apache.spark.util.ClosureCleaner $ .clean (ClosureCleaner.scala: 122) em org.apache.spark.SparkContext.clean (SparkContext.scala: 2055) em org.apache.spark.rdd.RDD $ anonfun $ map $ 1.apply (RDD.scala: 324) em org.apache.spark.rdd.RDD $ anonfun $ map $ 1.apply (RDD.scala: 323) em ... e mais Causado por: java.io.NotSerializableException: org.apache.spark.sql.Column Pilha de serialização: - objeto não serializável (classe: org.apache.spark.sql.Column, valor: 'lag (name, 1, nulo) windowspecdefinition (sobrenome, UnspecifiedFrame)) - campo (classe: $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC, nome: lag_result, tipo: classe org.apache.spark .sql.Column) ... e mais

questionAnswers(1)

yourAnswerToTheQuestion