【发布时间】:2020-09-22 23:04:49
【问题描述】:
当我尝试创建类的对象并调用特定方法 newRDD 和 blah 时,我不断收到以下错误堆栈跟踪
I create a spark shell by importing the jar and run the following in spark-shell
spark-shell --master=yarn --jars=sample_jar.jar --files database.cfg
scala> val reader = new Sample(spark)
scala> val a = reader.buildFileRDD("/xyz/path")
org.apache.spark.SparkException: Task not serializable
at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:298)
at org.apache.spark.util.ClosureCleaner$.org$apache$spark$util$ClosureCleaner$$clean(ClosureCleaner.scala:288)
at org.apache.spark.util.ClosureCleaner$.clean(ClosureCleaner.scala:108)
at org.apache.spark.SparkContext.clean(SparkContext.scala:2294)
at org.apache.spark.rdd.RDD$$anonfun$filter$1.apply(RDD.scala:387)
at org.apache.spark.rdd.RDD$$anonfun$filter$1.apply(RDD.scala:386)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
at org.apache.spark.rdd.RDD.withScope(RDD.scala:362)
at org.apache.spark.rdd.RDD.filter(RDD.scala:386)
at Sample.newRDDscala(Sample.scala:117)
... 48 elided
Caused by: java.io.NotSerializableException:
如何解决此错误?
【问题讨论】:
-
你能发布这个代码 - DatabaseUtils ?? & 你在哪里使用这个 - dbObj
-
@Srinivas 添加了更多详细信息
-
将 dbObj 更改为 def 或在此之前添加大小写 - DatabaseUtils ?试试
-
@Srinivas 没明白。可以举个例子吗?
-
经验法则是,如果您使用 scala 类的对象或 spark 闭包内的对象,如 rdd.map/filter/mapPartitions 等,则必须对其进行序列化,希望对您有所帮助:)
标签: scala apache-spark apache-spark-sql rdd