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的主要内容,如果未能解决你的问题,请参考以下文章