使用idea和maven開發和打包scala和spark程式
使用idea構建maven管理的scala和spark程式,預設已經裝好了idea、scala並在idea中安裝了scala外掛。
一、新建Maven專案
開啟idea,點選File—New—Project,彈出如下介面,選擇Maven專案,檢視是否是正確的JDK配置項正常來說這一欄會自動填充的(如果這裡沒有正常顯示JDK的話,可以點選右側的New…按鈕,然後指定JDK安裝路徑的根目錄即可)。在介面上也提供了"create from archetype"一些現成的模板,此處我們不使用模板,所以不勾選。點選Next。
來到Maven專案最重要三個引數的設定頁面,這三個引數分別為:GroupId, ArtifactId和Version。GroupId一般為公司網址的反寫+專案名 ArtifactId一般為專案名-模組名 Version=版本號,一般為1.0-SNAPSHOT即可。步驟如下圖所示:
點選Next,進入下一步頁面,可以設定專案名稱和專案儲存路徑。
點選Finish,專案建立完成,進入到專案介面,點選右下角的Enable Auto-Import,這樣會自動匯入pom檔案裡的依賴。
二、Hello world
將Scala的框架新增到這個專案中,方法是在左側欄中的專案名稱上右鍵選單中點選Add Framework Support…,然後在開啟的對話方塊左側邊欄中,勾選Scala前面的複選框,然後點選確定即可(前提是上文中所述步驟都已正確走通,否則你很有可能看不到Scala這個選項的);
在main資料夾中建立一個名為 scala 的資料夾,並右鍵點選 scala 資料夾,選擇 Make Directory as,然後選擇Sources Root ,這裡主要意思是將 scala 資料夾標記為一個原始檔的根目錄,然後在其內的所有程式碼中的 package ,其路徑就從這個根目錄下開始算起;
在已經標記好為原始檔根目錄的 scala 資料夾 上,右鍵選擇 New,然後選擇 Scala Class,隨後設定好程式的名稱,並且記得將其設定為一個 Object(類似於Java中含有靜態成員的靜態類),正常的話,將會開啟這個 Object 程式碼介面,並且可以看到IntelliJ IDEA自動添加了一些最基本的資訊。
在建立的 Object 中輸入如下語句:
def main(args: Array[String]):Unit = {
println("Hello World!")
}
4.在程式介面的任意位置,右鍵單擊後選擇 Run '你的程式名稱',靜待程式的編譯和執行,然後在下方自動開啟的視窗中,你就可以看到振奮人心的 Hello World!了
三、匯入Spark依賴
此時你已經可以成功的執行一個Scala 專案了。想要執行在spark 上則還需要匯入相關依賴。開啟pom.xml檔案新增如下依賴。
<properties>
<spark.version>2.0.2</spark.version>
<scala.version>2.11</scala.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<version>2.15.2</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
新增完成後,等待idea完成依賴包的自動匯入(idea右下方可以看到是否匯入完成)。四、編寫Spark程式碼
import org.apache.spark.{SparkConf, SparkContext}
object MySpark {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("mySpark")
//setMaster("local") 本機的spark就用local,遠端的就寫ip
//如果是打成jar包執行則需要去掉 setMaster("local")因為在引數中會指定。
conf.setMaster("local")
val sc = new SparkContext(conf)
val rdd = sc.parallelize(List(1, 2, 3, 4, 5, 6)).map(_ * 3)
val mappedRDD = rdd.filter(_ > 10).collect()
//對集合求和
println(rdd.reduce(_ + _))
//輸出大於10的元素
for (arg <- mappedRDD)
print(arg + " ")
println()
println("math is work")
}
}
五、打包jar
選擇File-Project Structure,在下圖中選擇箭頭所指選項
在彈出對話方塊中繼續選擇如下圖所示的配置。
由於我們的jar包實在spark 上執行的,所可以刪除其他不需要的依賴包,如下圖所示,刪除其他不需要的包,只留下紅色矩形中的兩個。
注意:output directory 的路徑。此處是你匯出 jar 的路徑
六、到伺服器Spark執行
執行命令為:
spark-submit --class MySpark SparkTest.jar
稍等片刻,執行結果為:
63
12 15 18
math is work
參考部落格:https://blog.csdn.net/u012373815/article/details/53266301