目录
一、Spark基本介绍(可跳过)
1、Spark历史介绍
https://www.bilibili.com/video/BV1BJ411U7hW?p=707
2、Spark简要说明
https://www.bilibili.com/video/BV1BJ411U7hW?p=708
3、Spark核心概念
https://www.bilibili.com/video/BV1BJ411U7hW?p=709
二、Linux安装使用Spark
B站视频教程(可跳过)
https://www.bilibili.com/video/BV1BJ411U7hW?p=710
1、下载
最新版本:http://spark.apache.org/downloads.html
历史版本:https://archive.apache.org/dist/spark/
为与视频教程保持一致,下载基于hadoop2.7的2.1.1版本
2、上传并解压
xftp上传至目录/opt/software目录下
解压至/opt/module目录下
tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /opt/module/
切换至解压目录将文件夹重命名为spark
cd /opt/module
mv spark-2.1.1-bin-hadoop2.7 spark
3、运行Spark示例程序
(1)先切换到spark根目录
cd /opt/module/spark
(2)输入命令执行程序
(计算100次取平均求解PI值)
bin/spark-submit \--class org.apache.spark.examples.SparkPi \--executor-memory 1G \--total-executor-cores 2 ./examples/jars/spark-examples_2.11-2.1.1.jar \100
程序开始执行
计算结果(不怎么准)
4、实现WordCount功能
(1)启动spark命令行模式
注意:若不在spark根目录则需要先切换目录:cd /opt/module/spark
bin/spark-shell
(2)一行代码实现WordCount
统计README.md文件同一内容出现次数
sc.textFile("README.md").flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).collect()
三、IDEA开发WordCount程序
1、创建maven项目
pom文件添加spark依赖
<!--添加spark依赖-->
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
<build>
<finalName>WordCount</finalName>
<plugins>
<!--添加Scala编译插件-->
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.2</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
2、实现WordCount程序
(1)创建包com.spark.demo
(2)创建WordCount文件
注意:类型选择Object
(3)创建目录in及文件word.txt
Hello Scala
Hello Spark
Hello World
Hello Hadoop
Hello Scala
(4)书写WordCount代码
package com.spark.demo
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object WordCount {
/**
* 实现WordCount功能
*
* @param args
*/
def main(args: Array[String]): Unit = {
// 创建SparkConf对象并设置参数
val config = new SparkConf().setMaster("local[*]").setAppName("WordCount")
// 创建Spark上下文对象
val sc = new SparkContext(config)
// 读取指定目录下的文件(逐行读取内容)
val lines: RDD[String] = sc.textFile("in")
// 将一行行内容分解为一个个的单词
// 完整写法:
// val words: RDD[String] = lines.flatMap((item)=>{item.split(" ")})
val words: RDD[String] = lines.flatMap(_.split(" "))
// 数据结构转换,将集合元素由字符串转换为元组
// 完整写法:
// val wordToOne: RDD[(String, Int)] = words.map((item)=>{(item, 1)})
val wordToOne: RDD[(String, Int)] = words.map((_, 1))
// 两两进行聚合
// 完整写法:
// val wordToSum: RDD[(String, Int)] = wordToOne.reduceByKey((value1, value2)=>{value1 + value2})
val wordToSum: RDD[(String, Int)] = wordToOne.reduceByKey(_ + _)
// 收集计算结果
val result: Array[(String, Int)] = wordToSum.collect()
// 打印数组
// 完整写法
// result.foreach((item)=>{println(item)})
result.foreach(println)
// 用一行代码实现
// sc.textFile("in").flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).collect().foreach(println)
}
}