1:spark是什么
Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。
2:spark和Hadoop的区别-使用场景
Hadoop:一次性数据计算,框架在处理数据的时候,会从存储设备中读取数据,进行逻辑操作,然后将处理的结果重新存储到介质中。
spark:spark和Hadoop的根本差异是多个作业之间的数据通信问题:spark多个作业之间数据通信是基于内存,而Hadoop是基于磁盘的
3:spark核心模块
spark core:spark最基础与最核心的功能
spark sql:spark用来操作结构化数据的组件
spark streaming:spark平台上针对实时数据进行流式计算的组件
spark mllib:机器学习的算法库
spark graphx:面向图计算提供的框架与算法库
4:word count案例的两种实现方式----常用第二种
package com.atguigu.bigdata.spark.wc
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Spark01_WordCount {
def main(args: Array[String]): Unit = {
//application
//spark框架
//建立和spark的连接,本地环境
val sparConf = new SparkConf().setMaster("local").setAppName("WordCount")
val sc = new SparkContext(sparConf);
//执行业务操作
//1.读取文件,获取一行一行的数据 "hello world"
val lines:RDD[String] = sc.textFile("datas");
//2.将一行数据进行拆分,形成一个一个的单词 "hello word"=>hello,word
val words:RDD[String] = lines.flatMap(_.split(" "));
//3.将数据根据单词进行分组,便于统计 (hello,hello,hello)(world,world)
val wordGroup:RDD[(String,Iterable[String])] = words.groupBy(word=>word);
//4.对分组的数据进行转换 (hello,3) (world,2)
val wordToCount = wordGroup.map{
case (word,list) => {
(word,list.size)
}
}
//5.采集输出控制台
val array:Array[(String,Int)] = wordToCount.collect()
array.foreach(println)
//关闭连接
sc.stop();
}
}
package com.atguigu.bigdata.spark.wc
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Spark02_WordCount {
def main(args: Array[String]): Unit = {
//application
//spark框架
//建立和spark的连接,本地环境
val sparConf = new SparkConf().setMaster("local").setAppName("WordCount")
val sc = new SparkContext(sparConf);
//执行业务操作
//1.读取文件,获取一行一行的数据 "hello world"
val lines:RDD[String] = sc.textFile("datas");
//2.将一行数据进行拆分,形成一个一个的单词 "hello word"=>hello,word
val words:RDD[String] = lines.flatMap(_.split(" "));
//3.分为每个单词之后,都标记为1
val wordToOne = words.map{
word => (word,1)
}
//4.将数据根据单词进行分组,便于统计 (hello,hello,hello)(world,world)
val groupRDD:RDD[(String,Iterable[(String,Int)])] = wordToOne.groupBy(
t => t._1
)
//5.对分组的数据进行转换 (hello,3) (world,2)
val wordToCount = groupRDD.map{
case (word,list) => {
list.reduce(
(t1, t2) => {
(t1._1, t1._2 + t2._2)
}
)
}
}
//6.采集输出控制台
val array:Array[(String,Int)] = wordToCount.collect()
array.foreach(println)
//关闭连接
sc.stop();
}
}
5:使用spark函数,实现word count
package com.atguigu.bigdata.spark.wc
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Spark03_WordCount {
def main(args: Array[String]): Unit = {
//application
//spark框架
//建立和spark的连接,本地环境
val sparConf = new SparkConf().setMaster("local").setAppName("WordCount")
val sc = new SparkContext(sparConf);
//执行业务操作
//1.读取文件,获取一行一行的数据 "hello world"
val lines:RDD[String] = sc.textFile("datas");
//2.将一行数据进行拆分,形成一个一个的单词 "hello word"=>hello,word
val words:RDD[String] = lines.flatMap(_.split(" "));
//3.分为每个单词之后,都标记为1
val wordToOne = words.map{
word => (word,1)
}
//spark框架提供了更多的功能,可以将分组和聚合使用一个方法实现
//相同的key的数据,可以对value进行reduce聚合
val wordToCount = wordToOne.reduceByKey((x,y) => {x+y})
val array:Array[(String,Int)] = wordToCount.collect()
array.foreach(println)
//关闭连接
sc.stop();
}
}