一.情況描述
使用idea +scala+spark,運行程序代碼如下:
package cn.idcast.hello import org.apache.spark.rdd.RDD import org.apache.spark import org.apache.spark.SparkConf import org.apache.spark.SparkContext /** * Author itcast * Desc 演示Spark入門案例-WordCount */ object WordCount_bak { def main(args: Array[String]): Unit = { //TODO 1.env/准備sc/SparkContext/Spark上下文執行環境 val conf: SparkConf = new SparkConf().setAppName("wc").setMaster("local[*]") val sc: SparkContext = new SparkContext(conf) sc.setLogLevel("WARN") //TODO 2.source/讀取數據 //RDD:A Resilient Distributed Dataset (RDD):彈性分布式數據集,簡單理解為分布式集合!使用起來和普通集合一樣簡單! //RDD[就是一行行的數據] val lines: RDD[String] = sc.textFile("data/input/words.txt") //TODO 3.transformation/數據操作/轉換 //切割:RDD[一個個的單詞] val words: RDD[String] = lines.flatMap(_.split(" ")) //記為1:RDD[(單詞, 1)] val wordAndOnes: RDD[(String, Int)] = words.map((_,1)) //分組聚合:groupBy + mapValues(_.map(_._2).reduce(_+_)) ===>在Spark里面分組+聚合一步搞定:reduceByKey val result: RDD[(String, Int)] = wordAndOnes.reduceByKey(_+_) //TODO 4.sink/輸出 //直接輸出 result.foreach(println) //收集為本地集合再輸出 println(result.collect().toBuffer) //輸出到指定path(可以是文件/夾) result.repartition(1).saveAsTextFile("data/output/result") result.repartition(2).saveAsTextFile("data/output/result2") result.saveAsTextFile("data/output/result3") //為了便於查看Web-UI可以讓程序睡一會 Thread.sleep(1000 * 60) //TODO 5.關閉資源 sc.stop() } }
(忘記截圖)結果報錯:Exception in thread "main" java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
網上說是,jar包沖突,但是並沒有解決問題
二.解決方案
問題根源:windows的scala版本與spark自帶的scala版本不一致,如圖所示:
這是spark自帶的版本為2.12.10
而我在windows裝的是2.12.11(忘記截圖),后來更換為2.12.10(重新安裝:IDEA安裝配置Scala環境):
之后運行成功,沒有報錯
最近老是遇到這種版本錯誤,難受😔