学习总结厦门大学林子雨老师的大数据课程
http://dblab.xmu.edu.cn/blog/spark/
一、环境准备:
Ubuntu16.04
IDEA Ultimate(破解版、教育版)
Java JDK 1.8
Hadoop2.7 (伪单机模式)
Spark 2.1.0
Hadoop与Spark的安装过程本文省略
二、IDEA + SBT
IDEA安装Scala插件(自带sbt),新建scala sbt项目
配置项目中的build.sbt
name := "SBTTest"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0"
编辑后,在IDEA界面右下角弹出框中选择Enable auto-import,等待……(大概十几分钟吧)
.
.
.
然后创建WordCount.scala文件:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.log4j.{Level,Logger}
object WordCount {
def main(args: Array[String]): Unit = {
// 屏蔽日志
Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
val inputFile = "file:///home/hadoop/word.txt"
val conf = new SparkConf().setAppName("WordCount").setMaster("local[1]")
val sc = new SparkContext(conf)
val textFile = sc.textFile(inputFile)
val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
wordCount.foreach(println)
}
}
代码解释:
textFile包含了多行文本内容,textFile.flatMap(line => line.split(” “))会遍历textFile中的每行文本内容,当遍历到其中一行文本内容时,会把文本内容赋值给变量line,并执行Lamda表达式line => line.split(” “)。line => line.split(” “)是一个Lamda表达式,左边表示输入参数,右边表示函数里面执行的处理逻辑,这里执行line.split(” “),也就是针对line中的一行文本内容,采用空格作为分隔符进行单词切分,从一行文本切分得到很多个单词构成的单词集合。这样,对于textFile中的每行文本,都会使用Lamda表达式得到一个单词集合,最终,多行文本,就得到多个单词集合。textFile.flatMap()操作就把这多个单词集合“拍扁”得到一个大的单词集合。
然后,针对这个大的单词集合,执行map()操作,也就是map(word => (word, 1)),这个map操作会遍历这个集合中的每个单词,当遍历到其中一个单词时,就把当前这个单词赋值给变量word,并执行Lamda表达式word => (word, 1),这个Lamda表达式的含义是,word作为函数的输入参数,然后,执行函数处理逻辑,这里会执行(word, 1),也就是针对输入的word,构建得到一个tuple,形式为(word,1),key是word,value是1(表示该单词出现1次)。
程序执行到这里,已经得到一个RDD,这个RDD的每个元素是(key,value)形式的tuple。最后,针对这个RDD,执行reduceByKey((a, b) => a + b)操作,这个操作会把所有RDD元素按照key进行分组,然后使用给定的函数(这里就是Lamda表达式:(a, b) => a + b),对具有相同的key的多个value进行reduce操作,返回reduce后的(key,value),比如(“hadoop”,1)和(“hadoop”,1),具有相同的key,进行reduce以后就得到(“hadoop”,2),这样就计算得到了这个单词的词频。
本文分享了厦门大学林子雨老师的大数据课程学习总结,详细介绍了如何在Ubuntu16.04环境下,使用IDEAUltimate搭建Spark2.1.0开发环境,包括JavaJDK1.8和Hadoop2.7的配置。通过IDEA+SBT构建Scala项目,配置build.sbt,实现WordCount示例程序,展示了如何使用SparkContext进行文本文件的单词计数。
&spm=1001.2101.3001.5002&articleId=81904845&d=1&t=3&u=8699b78793dd417ca7f6506145eebbf9)
816

被折叠的 条评论
为什么被折叠?



