IDEA运行spark 报错,如何解决?

Exception in thread "main" java.lang.NoSuchMethodError: scala.util.matching.Regex.<init>(Ljava/lang/String;Lscala/collection/Seq;)V
    at scala.collection.immutable.StringLike.r(StringLike.scala:284)
    at scala.collection.immutable.StringLike.r$(StringLike.scala:284)
    at scala.collection.immutable.StringOps.r(StringOps.scala:33)
    at scala.collection.immutable.StringLike.r(StringLike.scala:273)
    at scala.collection.immutable.StringLike.r$(StringLike.scala:273)
    at scala.collection.immutable.StringOps.r(StringOps.scala:33)
    at org.apache.spark.util.Utils$.<init>(Utils.scala:109)
    at org.apache.spark.util.Utils$.<clinit>(Utils.scala)
    at org.apache.spark.SparkConf.loadFromSystemProperties(SparkConf.scala:75)
    at org.apache.spark.SparkConf.<init>(SparkConf.scala:70)
    at org.apache.spark.SparkConf.<init>(SparkConf.scala:59)
    at cn.edu.nbpt.wordcount$.main(wordcount.scala:8)
    at cn.edu.nbpt.wordcount.main(wordcount.scala)

Process finished with exit code 1


从报错信息来看,Spark和Scala版本不兼容引起的。建议检查下Spark和Scala版本是否匹配。

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7716084
  • 你也可以参考下这篇文章:IDEA创建Spark程序,并本地运行
  • 除此之外, 这篇博客: IDEA编写Spark程序中的 本地运行 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • package cn.itcast.sparkhello
    
      
    
      import org.apache.spark.rdd.RDD
    
      import org.apache.spark.{SparkConf, SparkContext}
    
      
    
      
    
      object WordCount {
    
      def main(args: Array[String]): Unit = {
    
        //1.创建SparkContext
    
        val config = new SparkConf().setAppName("wc").setMaster("local[*]")
    
        val sc = new SparkContext(config)
    sc.setLogLevel("WARN")
    
        //2.读取文件
    
        //A Resilient Distributed Dataset (RDD)弹性分布式数据集
    
        //可以简单理解为分布式的集合,但是spark对它做了很多的封装,
    
        //让程序员使用起来就像操作本地集合一样简单,这样大家就很happy了
    
        val fileRDD: RDD[String] = sc.textFile("D:\\授课\\190429\\资料\\data\\words.txt")
    
        //3.处理数据
    
        //3.1对每一行按空切分并压平形成一个新的集合中装的一个个的单词
    
        //flatMap是对集合中的每一个元素进行操作,再进行压平
    
        val wordRDD: RDD[String] = fileRDD.flatMap(_.split(" "))
    
        //3.2每个单词记为1
    
        val wordAndOneRDD: RDD[(String, Int)] = wordRDD.map((_,1))
    
        //3.3根据key进行聚合,统计每个单词的数量
    
        //wordAndOneRDD.reduceByKey((a,b)=>a+b)
    
        //第一个_:之前累加的结果
    
        //第二个_:当前进来的数据
    
        val wordAndCount: RDD[(String, Int)] = wordAndOneRDD.reduceByKey(_+_)
    
        //4.收集结果
    
        val result: Array[(String, Int)] = wordAndCount.collect()
    
        result.foreach(println)
    
      }
    
    }
  • 您还可以看一下 徐培成老师的IDEA版大型Spark2.4架构师系列教程第四季课程中的 01.回顾spark核心组件和逻辑关系图小节, 巩固相关知识点