类可序列化时,任务无法序列化

时间:2020-07-09 22:30:55

标签: scala apache-spark databricks

我在Scala中有以下课程

case class A
  (a:Int,b:Int) extends Serializable

当我在Spark 2.4中尝试时。 (通过Databricks)

val textFile = sc.textFile(...) 
val df = textFile.map(_=>new A(2,3)).toDF()

(编辑:当我调用df.collect()或注册为表时发生错误)

我得到org.apache.spark.SparkException: Task not serializable

我想念什么?

我尝试添加编码器:

implicit def AEncoder: org.apache.spark.sql.Encoder[A] = 
  org.apache.spark.sql.Encoders.kryo[A]

import spark.implicits._
import org.apache.spark.sql.Encoders

编辑:我也尝试过:

val df = textFile.map(_=>new A(2,3)).collect()

但到目前为止还没有运气。

2 个答案:

答案 0 :(得分:1)

有时,这在DataBrick上间歇地发生。最烦人的。

重新启动群集,然后重试,有时我会遇到此错误,并且在重新启动之后没有发生。

答案 1 :(得分:0)

您可以使用您拥有的案例类将文件直接解析为Dataset

case class A(a:Int,b:Int) extends Serializable
val testRDD = spark.sparkContext.textFile("file:///test_file.csv")
val testDS = testRDD.map( line => line.split(",")).map(line_cols => A(line_cols(0).toInt, line_cols(1).toInt) ).toDS()

#res23: org.apache.spark.sql.Dataset[A] = [a: int, b: int]