【问题标题】:Task not serializable : Caused by java.io.NotSerializableException org.apache.spark.SparkConf任务不可序列化:由 java.io.NotSerializableException org.apache.spark.SparkConf 引起
【发布时间】:2016-09-02 21:30:16
【问题描述】:

我正在尝试使用 spark cassandra 连接器利用 Cassandra 数据库中的一些数据,但我遇到了这个错误:

org.apache.spark.SparkException: Task not serializable
.
.
Caused by: java.io.NotSerializableException: org.apache.spark.SparkConf

您可以在下面看到我的代码,我正在使用 spark-shell 进行实验

import com.datastax.spark.connector._, org.apache.spark.SparkContext, 
org.apache.spark.SparkContext._, org.apache.spark.SparkConf
import collection.JavaConverters._


sc.stop
val conf = new SparkConf(true).set("spark.cassandra.connection.host", "xxx.xxx.xxx.xxx")
val sc = new SparkContext("local","test",conf)

val rdd = sc.cassandraTable("key", "table_name")
rdd.collect // ok
val rdd2 = rdd.where("aa > 10 and aa < 20")
rdd2.collect  // ok
// method1 return an object without any link with SparkContext
val rdd3 = rdd2.map( x=> method1() )
rdd3.collect   // ok
// Error rise to get rdd4
val rdd4 = rdd3.map(x=>method2(x,new Obj1(x.method3())))
// If i do that it works
rdd3.collect.map(x=>method2(x,new Obj1(x.method3())))

我读过一些案例,其中用户调用了包含 SparkContext 作为映射函数内的参数的方法,但我的情况并非如此。我调用方法的对象是与 SparkContext 没有任何链接的对象。

我尝试成功收集 rdd rdd2 rdd3,但是当我应用地图获取 rdd4 时,我遇到了错误。

【问题讨论】:

  • 看起来method2method3Obj1 包含SparkConf 的一个实例,它是不可序列化的。
  • 是否还有其他选择,因为 Obj1 方法 2/3 是用纯 Java 编写的,没有任何参考 SparkContext...
  • 恐怕问题出在其中之一,因为您的 map 函数中没有其他引用。我猜问题出在Obj1,因为函数应该是可序列化的。您可以尝试使用mixin,即val rdd4 = rdd3.map(x=&gt;method2(x,new Obj1(x.method3()) with Serializable ))
  • 有时你也会在 shell 中得到奇怪的链接。事物可能成为您不想要的功能对象图的一部分。通常 spark-shell 很擅长清理这些,但有时你仍然会遇到问题。

标签: scala apache-spark cassandra spark-cassandra-connector


【解决方案1】:

我遇到了这个错误,并通过删除行 val sc = new SparkContext 解决了这个问题,因为我使用的是 Apache Zeppelin,它默认提供了一个 sc

尝试将sc.stop 放在代码末尾。

【讨论】:

    【解决方案2】:

    我终于解决了这个问题,实际上我有本地声明的方法 2 的参数。

    val v1 = Set[Double].empty.asJava
    val v2 = java.lang.Boolean.TRUE
    

    我只是传播这个价值观,所有的作品都像一个魅力。 谢谢你的建议

    【讨论】:

      猜你喜欢
      • 2016-10-31
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 2017-11-03
      • 1970-01-01
      • 2018-04-06
      相关资源
      最近更新 更多