Scala 类可序列化时任务不可序列化

Scala 类可序列化时任务不可序列化,scala,apache-spark,databricks,Scala,Apache Spark,Databricks,我在Scala中有下面的类 case class A (a:Int,b:Int) extends Serializable 当我尝试使用Spark 2.4时。(通过Databricks) (编辑:调用df.collect()或注册为表时出错) 我得到org.apache.spark.SparkException:任务不可序列化 我错过了什么 我已尝试添加编码器: implicit def AEncoder: org.apache.spark.sql.Encoder[A] = org.

我在Scala中有下面的类

case class A
  (a:Int,b:Int) extends Serializable
当我尝试使用Spark 2.4时。(通过Databricks)

(编辑:调用df.collect()或注册为表时出错)

我得到
org.apache.spark.SparkException:任务不可序列化

我错过了什么

我已尝试添加编码器:

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

编辑:我也尝试过:

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

但是到目前为止运气不好。

您可以使用您拥有的case类直接将文件解析为
数据集

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]

有时,这种情况会在数据块上间歇性发生。最烦人的


重新启动群集并重试,我有时会出现此错误,但在重新启动后不会出现此错误。

real cluster或community edition?这到底有什么意义?@BluePhantom社区版。这只是一个示例,我有一个复杂的数据类型,可以通过正则表达式等进行提取。否则,我需要创建一个列数组(20+),手动映射列。我以为用打字机是件简单的事?!我不能得到错误,只是在CE上尝试。我也不需要新的。重新启动群集并重试,我有时会遇到此错误,但在重新启动后,此错误不会发生。任务不可序列化,即。您能确认吗?我正在等待5。@BluePhantom我仍然得到错误,但当我调用collect或register as a table时。这就是我的目标,但当我调用collect或register table时,我得到的任务不可序列化。我无法重现错误,在Databricks群集上对我很好。
val df = textFile.map(_=>new A(2,3)).collect()
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]