1.构建独立应用,采用Maven搭建Spark应用程序:
a. 1.新建spark的project项目构建maven项目
2.本地仓库seting修改 右边compile (每次创建 项目本地仓库都需要修改)
3.File -->Project Structure..选择+ -->lib 选scala -->Dependences 勾选scala-sdk-2.11.8
4.https://mvnrepository.com/search?q=spark
Spark Project Core
5.加载spark-core_2.11依赖库 -->Import Changes -->2.1.2:【在pom.xml 文件中】
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.1.2</version>
</dependency>
</dependecies>
注意:spark-core_{版本号},版本号应为scala的对应版本
version为spark 2.1.2
6.创建spark文件 标记为源码包
main -->新建文件夹 (sparkTest) -->右键Mark Directory as -->Resources Root
b.编写spark Driver端程序
1).创建SparkConf对象,并指定集群模式和AppName;
2).创建SparkContext对象,生成sc
3).创建RDD
4).针对业务需求,编写相应的RDD操作
创建sc对象两种方式:
1)spark shell: 直接可以用sc对象 2)javaAPI:先创建SparkConf,再通过SparkConf创建SparkContext
val conf = new SparkConf().setMaster("local").setAppName("wordcount")
val sc = new SparkContext(conf)
sc创建RDD3种方式:
1)由外部存储系统的数据集创建,包括本地的文件系统,还有所有Hadoop支持的数据集,比如HDFS、Cassandra、HBase等
rdd1 = sc.textFile("hdfs://slave1:9000/words.txt")
2)由一个已经存在的集合创建。
rdd2 = sc.parallelize(Array(1,2,3,4,5,6,7,8))
3)由一个已经存在的集合创建makeRDD
rdd3 = sc.makeRDD(Array(1,2,3,4,5,6,7,8))
例1: parallelize
import org.apache.spark.{SparkConf,SparkContext}
object WordCount {
def main(args: Array[String]): Unit = {
//构建Spark的conf对象,并通过setMaster方法设置集群模式运行的方式{“本地”},通过
//setAppName方法指定应用名字
val conf = new SparkConf().setMaster("local").setAppName("ListTest")
val sc = new SparkContext(conf);
val rdd = sc.parallelize(List(1,3,5,2,56))
println(rdd.count())
}
}
例2:textFile
import org.apache.spark.{SparkConf,SparkContext}
object WordCount {
def main(args: Array[String]): Unit = {
//构建Spark的conf对象,并通过setMaster方法设置集群模式运行的方式{“本地”},通过
//setAppName方法指定应用名字
val conf = new SparkConf().setMaster("local").setAppName("wordcount")
val sc = new SparkContext(conf);
val rdd = sc.textFile("file:///E:/inputwordcount")
//1.统计rdd的行数
println(rdd.count())
}
}
2.WordCount案例:
object WordCount {
def main(args: Array[String]): Unit = {
//构建Spark的conf对象,并通过setMaster方法设置集群模式运行的方式{“本地”},通过
//setAppName方法指定应用名字
val conf = new SparkConf().setMaster("local").setAppName("wordcount")
val sc = new SparkContext(conf);
val rdd = sc.textFile("file:///D:/测试数据/spark_wordcount.txt")
//中间结果保存,不可变,称为 lineage(血统)
//val rdd1 = rdd.flatMap(x=> x.split(" "))
//val rdd2 = rdd1.map(x=>(x,1))
//val rdd3 = rdd2.reduceByKey((x,y)=>x&#