Spark 出错:NoSuchMethodError: scala.Predef$.$conforms()Lscala/Predef$$less$colon$less

Posted

技术标签:

【中文标题】Spark 出错:NoSuchMethodError: scala.Predef$.$conforms()Lscala/Predef$$less$colon$less【英文标题】:Error with Spark: NoSuchMethodError: scala.Predef$.$conforms()Lscala/Predef$$less$colon$less 【发布时间】:2017-06-05 16:16:41 【问题描述】:

我有一个流式传输 Twitter 帖子的应用程序。 它工作正常,但是在修改构建路径后,我没有设法将它设置为以前的样子。我不断收到此错误:

Exception in thread "main" java.lang.NoSuchMethodError: scala.Predef$.$conforms()Lscala/Predef$$less$colon$less;
at org.apache.spark.util.Utils$.getSystemProperties(Utils.scala:1710)
at org.apache.spark.SparkConf.loadFromSystemProperties(SparkConf.scala:73)
at org.apache.spark.SparkConf.<init>(SparkConf.scala:68)
at org.apache.spark.SparkConf.<init>(SparkConf.scala:55)
at Analytics.init(Analytics.java:20)
at KafkaTwitterProducer.main(KafkaTwitterProducer.java:162)

这是我的 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>TwitterStreamingAnalyzer</groupId>
  <artifactId>TwitterStreamingAnalyzer</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
   <dependency>  
                <groupId>org.apache.kafka</groupId>  
                <artifactId>kafka_2.10</artifactId>  
                <version>0.10.2.1</version>  
           </dependency>  
           <!-- https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core -->  
           <dependency>  
                <groupId>org.twitter4j</groupId>  
                <artifactId>twitter4j-core</artifactId>  
                <version>4.0.4</version>  
           </dependency>  
           <!-- https://mvnrepository.com/artifact/org.twitter4j/twitter4j-stream -->  
           <dependency>  
                <groupId>org.twitter4j</groupId>  
                <artifactId>twitter4j-stream</artifactId>  
                <version>4.0.4</version>  
           </dependency>  
           <!-- https://mvnrepository.com/artifact/org.twitter4j/twitter4j-async -->  
           <dependency>  
                <groupId>org.twitter4j</groupId>  
                <artifactId>twitter4j-async</artifactId>  
                <version>4.0.4</version>  
           </dependency> 
           
     </dependencies> 
</project>

我已经阅读了所有类似的问题,但没有一个对我有帮助,因为我尝试导入正确版本的 jar,但它仍然不起作用。 我该如何解决这个问题?

【问题讨论】:

您的项目依赖项中应该有冲突的库。两个版本的 scala 库。您将不得不删除其中一个 【参考方案1】:

看起来您正在尝试在以其他版本(可能是 2.11)编译的 Spark 集群中使用以 Scala 2.10 编译的 kafka 库。在您的 pom.xml 中尝试此更改:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>TwitterStreamingAnalyzer</groupId>
  <artifactId>TwitterStreamingAnalyzer</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
   <dependency>  
                <groupId>org.apache.kafka</groupId>  
                <artifactId>kafka_2.11</artifactId>  
                <version>0.10.2.1</version>  
           </dependency>  
           <!-- https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core -->  
           <dependency>  
                <groupId>org.twitter4j</groupId>  
                <artifactId>twitter4j-core</artifactId>  
                <version>4.0.4</version>  
           </dependency>  
           <!-- https://mvnrepository.com/artifact/org.twitter4j/twitter4j-stream -->  
           <dependency>  
                <groupId>org.twitter4j</groupId>  
                <artifactId>twitter4j-stream</artifactId>  
                <version>4.0.4</version>  
           </dependency>  
           <!-- https://mvnrepository.com/artifact/org.twitter4j/twitter4j-async -->  
           <dependency>  
                <groupId>org.twitter4j</groupId>  
                <artifactId>twitter4j-async</artifactId>  
                <version>4.0.4</version>  
           </dependency> 

     </dependencies> 
</project>

【讨论】:

嗨@Mikel,我又遇到了这个问题。这次粘贴你编辑的 pom.xml 是不够的。有什么建议吗? 您是否更改了执行 Spark 的版本?例如,如果您使用的是 EMR,您是否更改了版本? 我清理了构建路径,我尝试重新导入相同的 jar,但一定有问题。我认为这只是罐子的问题,因为我没有改变任何东西。 您是否使用 IDE 执行?如果是,什么IDE?智能?您可能想在该 IDE 中检查为您的项目选择的 scala 版本 我不使用 eclipse,但这篇文章可能对 ***.com/questions/10847049/… 有所帮助

以上是关于Spark 出错:NoSuchMethodError: scala.Predef$.$conforms()Lscala/Predef$$less$colon$less的主要内容,如果未能解决你的问题,请参考以下文章

spark-redshift - 使用 Spark 2.1.0 保存时出错

尝试使用 sbt 导入 spark 时出错

Spark 上的 Pandas 命令出错?

从窗口服务器 2008 上的 spark shell 命令调用 spark 时出错

在 Spark 中创建 UDF 时出错

向spark提交任务出错