【问题标题】:Zeppelin + Spark: Reading Parquet from S3 throws NoSuchMethodError: com.fasterxml.jacksonZeppelin + Spark:从 S3 读取 Parquet 会引发 NoSuchMethodError:com.fasterxml.jackson
【发布时间】:2018-01-12 16:30:08
【问题描述】:

使用主要下载的 Zeppelin 0.7.2 二进制文件和带有 Hadoop 2.6 的 Spark 2.1.0,以下段落:

val df = spark.read.parquet(DATA_URL).filter(FILTER_STRING).na.fill("")

产生以下内容:

java.lang.NoSuchMethodError: com.fasterxml.jackson.module.scala.deser.BigDecimalDeserializer$.handledType()Ljava/lang/Class;
  at com.fasterxml.jackson.module.scala.deser.NumberDeserializers$.<init>(ScalaNumberDeserializersModule.scala:49)
  at com.fasterxml.jackson.module.scala.deser.NumberDeserializers$.<clinit>(ScalaNumberDeserializersModule.scala)
  at com.fasterxml.jackson.module.scala.deser.ScalaNumberDeserializersModule$class.$init$(ScalaNumberDeserializersModule.scala:61)
  at com.fasterxml.jackson.module.scala.DefaultScalaModule.<init>(DefaultScalaModule.scala:20)
  at com.fasterxml.jackson.module.scala.DefaultScalaModule$.<init>(DefaultScalaModule.scala:37)
  at com.fasterxml.jackson.module.scala.DefaultScalaModule$.<clinit>(DefaultScalaModule.scala)
  at org.apache.spark.rdd.RDDOperationScope$.<init>(RDDOperationScope.scala:82)
  at org.apache.spark.rdd.RDDOperationScope$.<clinit>(RDDOperationScope.scala)
  at org.apache.spark.SparkContext.withScope(SparkContext.scala:701)
  at org.apache.spark.SparkContext.parallelize(SparkContext.scala:715)
  at org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat$.mergeSchemasInParallel(ParquetFileFormat.scala:594)
  at org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat.inferSchema(ParquetFileFormat.scala:235)
  at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$7.apply(DataSource.scala:184)
  at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$7.apply(DataSource.scala:184)
  at scala.Option.orElse(Option.scala:289)
  at org.apache.spark.sql.execution.datasources.DataSource.org$apache$spark$sql$execution$datasources$DataSource$$getOrInferFileFormatSchema(DataSource.scala:183)
  at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:387)
  at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
  at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:441)
  at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:425)
  ... 47 elided

这个错误不会在普通的 spark-shell 中发生,只会在 Zeppelin 中发生。我尝试了以下修复,但什么也没做:

  • 将 jackson 2.6.2 jar 下载到 zeppelin lib 文件夹并重新启动
  • 将来自 maven 存储库的 jackson 2.9 依赖项添加到解释器设置中
  • 从 zeppelin lib 文件夹中删除 jackson jar

谷歌搜索没有出现类似情况。请不要犹豫,询问更多信息或提出建议。谢谢!

【问题讨论】:

    标签: apache-spark apache-zeppelin


    【解决方案1】:

    我遇到了同样的问题。我添加了 com.amazonaws:aws-java-sdkorg.apache.hadoop:hadoop-aws 作为 Spark 解释器的依赖项。这些依赖项引入了它们自己的 com.fasterxml.jackson.core:* 版本,并与 Spark 的冲突。

    您还必须从其他依赖项中排除com.fasterxml.jackson.core:*,这是${ZEPPELIN_HOME}/conf/interpreter.json Spark 解释器依赖部分的示例:

    "dependencies": [ { "groupArtifactVersion": "com.amazonaws:aws-java-sdk:1.7.4", "local": false, "exclusions": ["com.fasterxml.jackson.core:*"] }, { "groupArtifactVersion": "org.apache.hadoop:hadoop-aws:2.7.1", "local": false, "exclusions": ["com.fasterxml.jackson.core:*"] } ]

    【讨论】:

    • 从 Zeppelin 工件/依赖项中删除 org.apache.hadoop:hadoop-aws:2.8.0 也对我有用。
    • 谢谢伙计,解决了我的问题。
    【解决方案2】:

    另一种方法是将其直接包含在笔记本单元格中:

    %dep
    z.load("com.fasterxml.jackson.core:jackson-core:2.6.2")
    

    【讨论】:

    • z.load 在功能上应该与上面已经尝试过的第二个选项相同:将 jackson 2.9 依赖项从 maven 存储库添加到解释器设置。
    猜你喜欢
    • 2020-10-28
    • 2020-05-17
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2016-11-29
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多