用Idea搭建我們的Spark環境
用IDEA搭建我們的環境有很多好處,其中最大的好處,就是我們甚至可以在工程當中直接執行、除錯我們的程式碼,在控制檯輸出我們的結果。或者可以逐行跟蹤程式碼,瞭解spark執行的機制。因此我們選擇了idea,當然Idea不是首選,當然也可以用其他工具。因為我們的Spark程式用scala和java寫,需要有java環境來作為支撐。因此任何能夠支撐java程式的開發工具,應該都能夠搭建我們的Spark程式。我這裡是MAC環境下,當然如果你是windows不用擔心,這裡只涉及到idea的操作,不涉及作業系統環境的更改,所以你無須擔心,因為Idea在Mac下和windows下並無多大差別
第一步,下載外掛,如果你只想用Java而不想用Scala,則可以跳過這一步
在preference中找到plugins,搜尋scala,然後下載該外掛
第二步,建立maven專案
第三步,匯入scala的SDK,如果你只想用Java而不想用Scala,則可以跳過這一步
開啟project structure
匯入SDK
此時可以建立Scala的class檔案了
第四步,在pom中匯入外掛和依賴
外掛主要是幫助打包scala包,方便再spark平臺上釋出我們的程式。當然僅僅最開始我們儘可能將專案執行在idea中,而不需要釋出。依賴是spark執行所必須的jar,其中spark的核心spark-core主要是用scala編寫的,當然你也能夠用java去使用。
在pom檔案中匯入
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>sparkdemo</groupId>
<artifactId>sparkdemo</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<finalName>HiveTest</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<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>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.8.4</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.11</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.11</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.20</version>
</dependency>
</dependencies>
</project>
複製程式碼
第五步,執行我們的第一個程式
當我們學習任何一項技術的時候,我們都有一個愛好,喜歡先輸出Hello,World!在Spark中亦是如此,我們第一個專案也是Hello,World!當然很多人說,spark的Hello,World!應該是字數統計(即統計一本書的或者一個檔案的單詞數)。當然這也沒錯,畢竟spark的最核心的功能是大資料和機器學習,但是對一個初學者來說,我認為,不妨再簡單些。
建立Scala檔案
接下來可以開始寫我們的第一個第一個程式。
首先建立一個SparkConf(),即spark的基礎配置,主要設定了master為“local”即執行在本機而非叢集,第二個是AppName。而後建立SparkContext,這裡取名為sc和我們在spark-shell中預設的一致。最後為sc設定內容,即一個list,其中包含三句話。依次輸出三句話
scala實現
package spark
import org.apache.spark.{SparkConf, SparkContext}
object HelloWorld {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local").setAppName("HelloWorld")
val sc = new SparkContext(conf)
val helloWorld = sc.parallelize(List("Hello,World!","Hello,Spark!","Hello,BigData!"))
helloWorld.foreach(line => println(line))
}
}
複製程式碼
執行得到:
Hello,World!
Hello,Spark!
Hello,BigData!
複製程式碼
java實現
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import java.util.Arrays;
public class HelloWorldJava {
public static void main(String[] args){
SparkConf conf = new SparkConf().setMaster("local").setAppName("HelloWorldJava");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> helloWorld = sc.parallelize(Arrays.asList("Hello,World","Hello,Spark","Hello,BigData"));
System.out.println(helloWorld.collect());
}
}
複製程式碼
執行得到:
[Hello,World, Hello,Spark, Hello,BigData]
複製程式碼
python實現
from pyspark import SparkConf,SparkContext
conf = SparkConf().setMaster("local").setAppName("HelloWorld")
sc = SparkContext(conf=conf)
helloWorld = sc.parallelize(["Hello,World","Hello,Spark","Hello,BigData"]).collect()
print(helloWorld)
複製程式碼
執行得到:
['Hello,World', 'Hello,Spark', 'Hello,BigData']
複製程式碼
至此我們就在scala、java、python中執行了我們的第一個spark程式。當然,我們可以選擇自己最上手的語言去寫spark程式,spark本身也非常良好地支援了這三種語言。因此不要讓語言成為障礙,反而因此獲得更多的選擇。無論是java、scala還是python都能寫出良好執行的spark程式