【问题标题】:Spark- Exception in thread java.lang.NoSuchMethodErrorSpark-线程 java.lang.NoSuchMethodError 中的异常
【发布时间】:2020-08-30 12:41:11
【问题描述】:

我正在尝试使用 pmml4s 库从 pmml 文件中对模型进行评分。每次我在 Spark 中提交作业时都会收到以下错误:

20/05/13 23:30:10 ERROR SparkSubmit: org.apache.spark.sql.types.StructType.names(). 
[Ljava/lang/String;
   java.lang.NoSuchMethodError: org.apache.spark.sql.types.StructType.names(). 
    [Ljava/lang/String;
    at org.pmml4s.spark.ScoreModel.transform(ScoreModel.scala:56)
    at com.aexp.JavaPMML.main(JavaPMML.java:24)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)

以下是我的代码示例:

ScoreModel model = ScoreModel.fromFile(args[0]);
SparkConf conf = new SparkConf();
SparkSession spark = SparkSession.builder().config(conf).getOrCreate();
Dataset<?> df = spark.read().format("csv")
                     .option("header", "true")
                     .option("inferSchema", "true")
                     .load(args[1]);

Dataset<?> scoreDf = model.transform(df);

以下是我正在使用的 pom 文件:

<dependencies>
    <dependency>
        <groupId>org.pmml4s</groupId>
        <artifactId>pmml4s-spark_2.11</artifactId>
        <version>0.9.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.3.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
          <artifactId>spark-core_2.11</artifactId>
          <version>2.3.2</version>
        </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-mllib_2.11</artifactId>
        <version>2.3.2</version>
    </dependency>
</dependencies>

我已经编辑了我的 pom 文件并使 spark 版本相似,但我仍然面临同样的问题。当我使用 Scala 时,我面临同样的问题。我是否缺少任何依赖项?

【问题讨论】:

  • 为什么要使用不同版本的 spark 库?
  • 我已经制作了类似的火花版本,但我仍然面临同样的问题。
  • 这个问题解决了吗?

标签: java scala apache-spark pmml


【解决方案1】:

该错误是由于 PMML4S-Spark 使用了 StructType 的方法names 引起的,该方法是从 Spark 2.4 开始引入的。现在它已在最新的 PMML4S-Spark 0.9.5 中得到修复。请更新您的 pom 文件以使用新版本:

    <dependency>
        <groupId>org.pmml4s</groupId>
        <artifactId>pmml4s-spark_2.11</artifactId>
        <version>0.9.5</version>
    </dependency>

【讨论】:

    【解决方案2】:

    尝试使用与 spark 库相同的 version。如果 spark 版本不匹配,我们将在许多地方收到NoSuchMethodError 问题,因为这些方法可能已在最新版本中修改或删除。

    【讨论】:

      猜你喜欢
      • 2017-01-31
      • 1970-01-01
      • 2019-06-18
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多