spark问题----cannot assign instance

 

User class threw exception: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 7.0 failed 4 times, most recent failure: Lost task 0.3 in stage 7.0 (TID 14, sq-spark-node13.800best.com, executor 2): java.lang.ClassCastException: cannot assign instance of scala.collection.immutable.List$SerializationProxy to field org.apache.spark.rdd.RDD.org$apache$spark$rdd$RDD$$dependencies_ of type scala.collection.Seq in instance of org.apache.spark.rdd.MapPartitionsRDD

at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2133)

at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1305)

at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2006)

at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1924)

at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)

at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2000)

at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1924)

at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)

。。。。。。


上述 就是我遇到的问题,

情形如下:

我在代码中 定义了 spark的udf,返回值是boolean类型,然后用scala的代码 执行,发现在 本地执行 和 集群上运行都没有问题。

但是当我用 java版本的时候,发现 本地local模式 可以正常执行,但是放入到 集群上执行的时候 发现了这个问题。

非常奇怪,网上找了很多解决方案,发现一个都没有用。后来想了一下,我在Java版本中也使用过很多的udf,为什么这个udf突然就不行了。

比对了 其他的udf,发现只有这一个udf返回的类型是boolean.

因此我修改了这个udf,将返回值修改成int类型,放入到集群上运行,发现 没有问题了。

真是一个很奇怪的问题。

我 的spark是2.3,Scala是2.11.

虽然解决 了问题,但是 不知道原因。

你可能感兴趣的:(大数据)