Exception in thread main java.lang.NoSuchMethodError: scala.Predef$
生活随笔
收集整理的這篇文章主要介紹了
Exception in thread main java.lang.NoSuchMethodError: scala.Predef$
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
使用intelli idea +scala+spark,運行程序代碼如下:
package cn.limbo.sparkimport org.apache.spark.SparkConf import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD/*** 使用Scala開發(fā)本地測試的Spark WordCount程序*/ object WordCount {def main(args: Array[String]): Unit = {/*** 第一步:創(chuàng)建Spark的配置對象SparkConf,設置Spark程序的運行時的配置信息* 例如說通過setMaster來設置程序要連接的Spark集群的Master的URL* 如果設置為local,則代表Spark程序在本地運行,特別適合于配置條件的較差的人**/val conf = new SparkConf()conf.setAppName("MyFirstSparkApplication") //設置應用程序的名稱,在程序運行的監(jiān)控界面可以看到名稱conf.setMaster("local") //此時程序在本地運行,無需安裝Spark的任何集群/*** 第二步:創(chuàng)建SparkContext對象* SparkContext是Spark程序所有功能的唯一入口,無論是采用Scala,Java,Python等都必須有一個SparkContext* SparkContext核心作用:初始化Spark應用程序運行所需要的核心組件,包括DAGScheduler,TaskScheduler,Scheduler* 同時還會負責Spark程序往Master注冊程序等* SparkContext是整個Spark應用程序中最為至關重要的一個對象。*/val sc = new SparkContext(conf) //創(chuàng)建SparkContext對象,通過傳入SparkConf實例來定制Spark運行的具體參數(shù)和配置信息/*** 第三步:根據(jù)具體的數(shù)據(jù)來源(HDFS,HBase,Local FS(本地文件系統(tǒng)) ,DB,S3(云上)等)通過SparkContext來創(chuàng)建RDD* RDD的創(chuàng)建基本有三種方式,根據(jù)外部的數(shù)據(jù)來源(例如HDFS),根據(jù)Scala集合,由其他的RDD操作產(chǎn)生* 數(shù)據(jù)會被RDD劃分成為一系列的Partitions,分配到每個Partition的數(shù)據(jù)屬于一個Task的處理范疇*///文件的路徑,最小并行度(根據(jù)機器數(shù)量來決定)//val lines:RDD[String]= sc.textFile("F://spark//spark-1.6.2-bin-hadoop2.6//README.md", 1) //讀取本地文件,并設置Partition = 1val lines= sc.textFile("D:\\Program\\spark-2.4.0-bin-hadoop2.7//README.md", 1) //讀取本地文件,并設置Partition = 1 //類型推導得出lines為RDD/*** 第四步:對初始的RDD進行Transformation級別的處理,例如map,filter等高階函數(shù)等的編程,來進行具體的數(shù)據(jù)計算* 4.1:將每一行的字符串拆分成單個的單詞* 4.2:在單詞拆分的基礎上對每個單詞的實例計數(shù)為1,也就是word =>(word,1)* 4.3:在每個單詞實例計數(shù)為1基礎之上統(tǒng)計每個單詞在文件出現(xiàn)的總次數(shù)*///對每一行的字符串進行單詞的拆分并把所有行的拆分結(jié)果通過flat合并成為一個大的單詞集合val words = lines.flatMap { line => line.split(" ") } //words同樣是RDD類型val pairs = words.map { word => (word,1) }val wordCounts = pairs.reduceByKey(_+_) //對相同的key,進行value的累加(包括Local和Reducer級別同時Reduce)wordCounts.foreach(wordNumberPair => println(wordNumberPair._1 + " : " + wordNumberPair._2))sc.stop() //注意一定要將SparkContext的對象停止,因為SparkContext運行時會創(chuàng)建很多的對象/*這個程序運行之后一定會有一個錯誤,因為 沒有hadoop環(huán)境,這個不是程序錯誤,也不影響任何功能*/} }?問題根源:版本不一致,spark自帶的scala版本,如圖所示:
系統(tǒng)自帶的版本如圖所示:
?
?解決方案:
?
刪除原來系統(tǒng)安裝下版本,導入spark自帶的版本;?然后再運行就ok了;結(jié)果如圖所示:
總結(jié)
以上是生活随笔為你收集整理的Exception in thread main java.lang.NoSuchMethodError: scala.Predef$的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成功导入并运行breeze jar库
- 下一篇: windows安装spark工具记录