繁体   English   中英

当 class 可序列化时,任务不可序列化

[英]Task not serializable when class is serializable

我在 Scala 中有以下 class

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

当我在 Spark 2.4 中尝试时。 (通过数据砖)

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()

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

有时这会在 DataBricks 上间歇性发生。 最烦人。

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

您可以使用您拥有的案例 class 直接将文件解析为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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM