我在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()
但到目前为止还没有运气。
答案 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]