package com.dt.spark
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object WordCount {
def main(args: Array[String] ){
/**
* 第1步,创建Spark的配置对象SparkConf ,设置Spark程序的运行时的配置信息。
* */
val conf = new SparkConf() ;//创建SparkConf 对象
conf.setAppName("Wow,my first spark app"); // 设置应用程序的名称,在程序运行的监控面可以看到名称
conf.setMaster("local");//此时,程序在本地运行,不需要安装Spark集群
/**
* 第2步:创建SparkContext 对象
* Sparkcontext 是spark 程序所有功能的唯一入口,无论是采用Scala ,Java 、Python, R等都必须有一个Spark
* Sparkcontext 核心作用:初始spark 应用程序 运行所有需要的核心组件,DAGScheduker,TaskScheduker
* 同时还会负责Spark程序Master注册程序
* Sparkcontext 是整个 应用中最为至关重要的一个对象
*
* */
val sc = new SparkContext(conf);//创建sparkContext对象,通过sparkConf实例来定制spark运行
/**
* 第3步,根据具体的数据来源(HDFS,HBase,local FS,DB,S3等)通过SparkContext来创建RDD
* RDD的创建基本有三种方式:根据外部的数据来源(例如 HDFS),根据scala 集合、由其它的RDD操作
* 数据会被RDD划分成为一系列的Partition,分配到每个Partition的数据属于一个Task的处理范畴
* */
//val lines :RDD[String] = sc.textFile("E://work//64bit//scala//spark-1.6.0-bin-hadoop2.6//README.md", 1);//读取本地文件,并设置一个Partition
val lines = sc.textFile("G://work//64bit//scala//spark-1.6.0-bin-hadoop2.6//README.md", 1);//读取本地文件,并设置一个Partition
/**
* 第4步:对初始的RDD进行Transformation级别的处理,例如 map filter 等高阶函数等的编程,来进行具体的数据计算
* 4.1步 :将每一行的字符串拆分分成单个的单词
* */
val words = lines.flatMap{line => line.split(" ")}; //对每一行的字符串进行拆分 并把所有的拆分结果通过flat 合并成一个
/**
* 第4步:对初始的RDD进行Transformation级别的处理,例如 map filter 等高阶函数等的编程,来进行具体的数据计算
* 4.2步 : 在单词拆分的基础上对每个单词实例计数为1,也是word=>(word,1)
* */
val pairs = words.map{word => (word,1)};
/**
* 第4步:对初始的RDD进行Transformation级别的处理,例如 map filter 等高阶函数等的编程,来进行具体的数据计算
* 4.3步 : 在每个单词实例计数为1基础之上统计每个单词在文件中出现的总次数
* */
val wordCounts = pairs.reduceByKey(_+_);//对相同的key,进行value的累计(包括Local和Reducer级别同时Reduce)
wordCounts.foreach(wordNumberPair => println(wordNumberPair._1+":"+wordNumberPair._2));
sc.stop();
}
}
安装:
https://blog.youkuaiyun.com/nxw_tsp/article/details/78281533