Exception in thread “main“ java.lang.NoSuchMethodError: scala.reflect.ClassT

运行环境:IntelliJ + scala + spark +hadoop
出错原因:IntelliJ 中的scala版本与Spark 自带的scala版本不同导致

我刚开始以为只要把IntelliJ 里的scala 版本配置与虚拟机配置的scala版本一致就行,后来发现不是这样,是要把IntelliJ 中的scala版本与Spark 自带的scala版本一致才行,不是虚拟机里的。
比如说,我虚拟机里配置的scala版本是2.13.3,而安装的Spark自带版本是2.12.10,IntelliJ 里的scala版本应该与Spark自带的版本相同才行,都是2.12.10

虚拟机查看Spark自带安装版本:

/app/Spark/spark-3.0.1-bin-hadoop3.2/jars

也即在Spark安装目录下的jars目录下查看,我的路径是/app/Spark/spark-3.0.1-bin-hadoop3.2
在这里插入图片描述

更改IntelliJ scala版本,与Spark自带的scala版本一致

注意:此处IntelliJ已经安装了scala插件,只是版本不同,需要更换而已

1. 下载scala

File -> Project Structure -> Global Libraries -> 点击左上角“+-> 
Scala SDK -> 点击Download ->选择自己想要的版本下载(可能要一会,不
过下载的也就那几个文件)

在这里插入图片描述
在这里插入图片描述

2. 更换版本

File -> Project Structure -> Global Libraries -> 
选择下载后的scala -> 右击选中,删除之前下载的scala

注意:这里一定要把之前版本删除了,包括Libraries里的和Global Libraries里的,我这里之前的没删,又加载了后面下的scala插件,结果import org.apache.spark.{SparkConf,SparkContext}不成功,后来清除干净,退出重进好了
Libraries里的删除同理一样
在这里插入图片描述
添加新的scala插件

File -> Project Strcuture -> Libraries -> 点击左上角“+-> Scala SDK
-> 选择对应版本 ->点击OK

在这里插入图片描述

3.更改pom.xml里scala版本

<properties>
        <scala.version>2.12.10</scala.version>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>3.0.1</version>
        </dependency>
    </dependencies>

spark-core插件版本获取见:https://mvnrepository.com/search?q=spark-core
输入spark-core ,点击第一个Spark Project Score,点击对应版本,复制Maven里面的内容到pom.xml里
在这里插入图片描述
在这里插入图片描述
总结的可能不到位,只是个人实验过程中遇到的问题

参考

Exception in thread “main” java.lang.NoSuchMethodError: scala.Predef$

idea运行的时候出现的问题Exception in thread “main” java.lang.NoSuchMethodError: scala.collection.immutable.HashSet$

虽然这个是windows下的Spark集群,但是解决问题的方法都是异曲同工
Windows下IDEA运行scala版本的spark程序(踩坑总结)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 异常在主线程中:"main" java.lang.nosuchmethoderror: 这个错误通常是因为代码中调用了一个不存在的方法。可能是因为方法名拼写错误、方法参数不匹配或者方法已经被删除或重命名。要解决这个问题,需要检查代码中调用的方法是否存在,确保方法名和参数正确。如果方法确实不存在,需要修改代码或者添加缺少的方法。 ### 回答2: 这个错误通常会在Java编程中出现,它指的是没有找到指定的方法。在程序调用一个类中的方法时,如果该方法的名称或参数与实际定义的方法不一致,则会出现此错误。如果在编译时错误,则会提示编译器错误消息,而运行时错误通常会显示堆栈跟踪信息,其中包含错误的类、方法和行号等信息。 造成这个错误的原因比较多,其中包括: 1.类文件版本不匹配。这种情况下,程序试图调用某个类中不存在的方法,因为该类的版本与应用程序代码不兼容。 2.类的字节码被戏弄了。这可能是因为class文件在运行时损坏或因为程序中的第三方库已经更改了类的方法,导致没有找到所需方法。 3.引用库文件错误。如果类引用了一个不正确的库文件,则程序将无法找到所需的方法。 4.方法名称错误。如果程序中方法名称错误,则程序将无法找到所请求的方法。 要解决此错误,需要确定引用正确版本的类文件、检查程序中是否存在错误的方法名称、检查库文件是否引用正确,或者尝试更新第三方库,或者检查文件缓存。因为这种错误通常没有明显的错误消息,因此需要仔细检查代码,找出具体的错误原因并进行修改。 ### 回答3: “exception in thread "main" java.lang.nosuchmethoderror”这个错误是Java编程中常见的错误之一,意思是在程序执行的过程中找不到指定的方法。 这个错误通常出现的原因是在代码中调用了不存在的方法或方法参数不匹配,尤其是在调用第三方库或框架中的方法时容易出现这个错误。还有可能是类路径问题,即找不到需要的类或库。 解决这个问题的方法有以下几种: 1.检查程序中调用的方法名是否正确,确保方法签名(方法的名称、参数、返回值)和实际使用一致; 2.检查依赖库的版本信息是否正确,确保使用的依赖库中包含程序中调用的方法; 3.检查类路径,确保程序能正确地找到需要的类或库文件; 4.可能是因为缺少一些依赖,需要手动添加缺失的依赖库; 5.可以尝试重新编译和构建程序,以更新库文件和依赖。 总之,这个错误的出现需要我们仔细检查代码,确认是否有语法错误或者方法调用不正确的问题。如果确认代码没有问题,可以考虑检查项目依赖、类路径等环境问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值