Serialization 火花并联?(找不到名为';id';的creator属性)

Serialization 火花并联?(找不到名为';id';的creator属性),serialization,apache-spark,Serialization,Apache Spark,调用Apache Spark 1.4.0时,是什么导致此序列化错误: sc.parallelize(strList, 4) 将引发此异常: com.fasterxml.jackson.databind.JsonMappingException: Could not find creator property with name 'id' (in class org.apache.spark.rdd.RDDOperationScope) 从Jackson中的addBeanProps抛出:co

调用Apache Spark 1.4.0时,是什么导致此序列化错误:

sc.parallelize(strList, 4)
将引发此异常:

com.fasterxml.jackson.databind.JsonMappingException: 
Could not find creator property with name 'id' (in class org.apache.spark.rdd.RDDOperationScope)
Jackson中的
addBeanProps
抛出:com.fasterxml.Jackson.databind.desr.BeandSerializerFactory\addBeanProps

RDD是一个Seq[String],而#分区似乎并不重要(尝试了1、2、4)

没有序列化堆栈跟踪,因为正常情况下无法序列化辅助对象闭包


另一种追踪方法是什么?

我怀疑这是由于类路径为您提供了不同于Spark所期望的版本的
jackson
(如果我没有弄错的话,就是2.4.4)。您需要调整类路径,以便Spark首先引用正确的
jackson

@Interfector是正确的。我也遇到了这个问题,下面是我的sbt文件中的一个片段和修复它的“dependencyOverrides”部分

libraryDependencies ++= Seq(
  "com.amazonaws" % "amazon-kinesis-client" % "1.4.0",
  "org.apache.spark" %% "spark-core" % "1.4.0",
  "org.apache.spark" %% "spark-streaming" % "1.4.0",
  "org.apache.spark" %% "spark-streaming-kinesis-asl" % "1.4.0",
  "com.amazonaws" % "aws-java-sdk" % "1.10.2"
)

dependencyOverrides ++= Set(
  "com.fasterxml.jackson.core" % "jackson-databind" % "2.4.4"
)

我在使用Gradle构建的项目中也遇到了同样的问题,我从产生问题的项目中排除了可传递依赖项:

dependencies
{
    compile('dependency.causing:problem:version')
    {
        exclude module: 'jackson-databind'
    }

....

}

这对我来说非常有效。

这对我来说非常有效
排除所有排除规则(organization=“com.fasterxml.jackson.core”)

你能添加strList的子集吗?@LokeshA.R。好问题-不,同样的错误,只要调用parallelize,甚至硬编码为
sc.parallelize(Seq(“一”、“二”、“三”),1)
我在pom.xml中将jackson databind的版本更改为2.4.4,这与spark 1.6默认使用的版本相匹配。它为我解决了这个问题。很好的建议。你能详细说明一下吗?如果spark 1.4.0是从ivy下载的,uber jar不包含相应版本的jackson databind吗?spark可能包含正确的jackson版本,但取决于类路径中的优先级,它可能不是类加载器获取的第一个版本。一种方法是使用spark submit并将uber jar放在类路径的末尾。这样Spark的jackson将首先加载。问题是这是理论上的,它可能会给AWS SDK带来问题,因为它也会使用较旧的版本,这可能会有问题,特别是在没有二进制兼容性的情况下。Interfector的建议非常好。我在使用spark 1.6时也遇到了同样的问题。jackson databind 2.4.4 mvn依赖完全解决了这个问题。很好的建议。dependencyOverride通过显示正确的NotSerializableException来提供帮助,但是使用databind版本“2.4.0”,并且只有在删除构建目录中的几个缓存副本之后。通过这种方式,您对jackson版本进行硬编码,我相信如果您只是从AWS SDK中显式排除jackson会更好。这样,当你升级时,你就不必考虑杰克逊了。最坏的情况是,如果排除不再是问题,您只需删除它。在spark 1.6.0中,该问题似乎尚未得到解决,它将解决
com.fasterxml.jackson.module#jackson-module-scala_2.11;2.4.4
播放2.4时也会出现此问题,此修复仍然有效。我们现在使用的是spark core 1.6.0,此修复仍然很好+1