dataset.collectAsList() 导致集群中的 java.lang.ClassCastException

Posted

技术标签:

【中文标题】dataset.collectAsList() 导致集群中的 java.lang.ClassCastException【英文标题】:dataset.collectAsList() causes java.lang.ClassCastException in cluster 【发布时间】:2019-12-03 10:20:56 【问题描述】:

当我在本地使用 IntelliJ 执行 List<Row> rows = (List<Row>) dataset.collectAsList(); 时,我得到了结果,但是在集群中运行时,我得到了以下错误。 我在代码中使用 UDF

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:2287)
        at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1417)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2292)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2210)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2068)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1572)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2286)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2210)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2068)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1572)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:430)
        at scala.collection.immutable.List$SerializationProxy.readObject(List.scala:490)
        at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
        at java.lang.Thread.run(Thread.java:748)

有什么想法吗?或需要任何额外的细节? 这是架构

StructType(StructField(Mar,StringType,false),
 StructField(DY,StringType,false),
 StructField(MB,StringType,false),
 StructField(Med,StringType,false),
 StructField(DS,StringType,false),
 StructField(dist,StringType,false),
 StructField(DL,DecimalType(36,2),false),
 StructField(GP28,IntegerType,false),
 StructField(GPHH,IntegerType,false),
 StructField(CP28,IntegerType,false),
 StructField(CPHH,IntegerType,false),
 StructField(I28,LongType,false),
 StructField(IHH,LongType,false),
 StructField(U28,IntegerType,false),
 StructField(UHH,IntegerType,false))

【问题讨论】:

数据集的架构是什么? 另外,您是在集群中运行它还是从 Intellj 中运行它? @LizardKing 添加了架构 仅在集群中发生 【参考方案1】:

由于它只发生在集群中,我猜你的类加载器有问题。这可能与没有将依赖项标记为已提供并最终在应用程序中加载 Spark 代码导致类不匹配有关。查看这些 spark 问题 SPARK-9219,如果您使用的是 UDF,请查看 SPARK-18074。

【讨论】:

【参考方案2】:

您正在尝试转换 List MapPartitionsRDD,这就是问题所在。它在您的错误中说。

【讨论】:

以上是关于dataset.collectAsList() 导致集群中的 java.lang.ClassCastException的主要内容,如果未能解决你的问题,请参考以下文章

思维导图学习---计算机相关基础思维导图

思维导图学习---计算机相关基础思维导图

MindManager思维导图教程:HTML5交互式导图

怎样利用思维导图模板绘制思维导图?分享几款常用的思维导图模板

在线思维导图软件,5分钟让你做出思维导图

手机怎么做思维导图