gpt4 book ai didi

scala - Spark Kryo 序列化失败

转载 作者:行者123 更新时间:2023-12-03 14:06:19 27 4
gpt4 key购买 nike

我有一段 Spark 代码可以在 Spark 1.3 上运行,但当我将它移至 Spark 1.5.2 时失败(集群升级超出我的控制)。失败如下:

Caused by: java.io.NotSerializableException: com.location.model.Profile
Serialization stack:
- object not serializable (class: com.location.model.Profile, value: com.location.model.Profile@596032b0)
- field (class: org.apache.spark.rdd.PairRDDFunctions$$anonfun$aggregateByKey$1, name: zeroValue$3, type: class java.lang.Object)
- object (class org.apache.spark.rdd.PairRDDFunctions$$anonfun$aggregateByKey$1, <function0>)
- field (class: org.apache.spark.rdd.PairRDDFunctions$$anonfun$aggregateByKey$1$$anonfun$1, name: $outer, type: class org.apache.spark.rdd.PairRDDFunctions$$anonfun$aggregateByKey$1)
- object (class org.apache.spark.rdd.PairRDDFunctions$$anonfun$aggregateByKey$1$$anonfun$1, <function0>)
- field (class: org.apache.spark.rdd.PairRDDFunctions$$anonfun$aggregateByKey$1$$anonfun$apply$10, name: createZero$1, type: interface scala.Function0)
- object (class org.apache.spark.rdd.PairRDDFunctions$$anonfun$aggregateByKey$1$$anonfun$apply$10, <function1>)
at org.apache.spark.serializer.SerializationDebugger$.improveException(SerializationDebugger.scala:40)
at org.apache.spark.serializer.JavaSerializationStream.writeObject(JavaSerializer.scala:47)
at org.apache.spark.serializer.JavaSerializerInstance.serialize(JavaSerializer.scala:84)
at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:301)

有趣的是手边的类 Profile 声明为 class Profile() extends KryoSerializable 并覆盖该接口(interface)的读/写方法。

我还将此配置设置为 Spark-submit: "--conf"-> "'spark.serializer=org.apache.spark.serializer.KryoSerializer'" 并注册了 <通过执行 conf.registerKryoClasses(Array(
classOf[个人资料], ...

所以一切都按照 Spark Tunning guide 中的说明进行,而且之前效果很好。请注意,异常显示 ClosureCleaner 使用了 JavaSerializerInstance,实际上如果我将 extends Serializable 添加到 Profile 类(class)有效。但我不确定它为什么使用该序列化程序,也不确定如果我特别要求 Kryo,我为什么要与 Java 序列化兼容。


编辑:我什至完全删除了参数,因为 registerKryoClasses 下的代码在任何情况下都设置了该属性。事实上,我怀疑正在使用 Kryo 序列化(我在 write 中添加了一个 println 并且它出现了,但是之前的某种验证是不正确的)。

最佳答案

你有没有试过从你的提交中删除',恕我直言应该是

--conf "spark.serializer=org.apache.spark.serializer.KryoSerializer"

你是否偶然从 luigi 提交过?

关于scala - Spark Kryo 序列化失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36042973/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com