簡體   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