Spark大数据处理 之 动手写WordCount
Spark是主流的大数据处理框架,具体有啥能耐,相信不需要多说。我们开门见山,直接动手写大数据界的HelloWorld:WordCount。
先上完整代码,看看咋样能入门。
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object WordCount {
def main(args: Array[String]) {
val conf = new SparkConf()
conf.setAppName("WordCount")
val sc = new SparkContext(conf)
val file = "hdfs://127.0.0.1:9000/file.txt"
val lines = sc.textFile(file)
val words = lines.flatMap(_.split("\\s+"))
val wordCount = words.countByValue()
println(wordCount)
}
}
寥寥10多行代码,就已经完成了,比大家想象的要简单,完全看不出大数据背后的存储,分布式,容错处理,这就是Spark给我们带来的福利。
接下来我们逐步解析其中的核心概念。
Spark上下文
Spark集群的执行单位是Application,任何提交的任务都会产生一个Application。一个Application只会关联上一个Spark上下文,也就是SparkContext。构建SparkContext时可以传入Spark相关配置,也就是SparkConf,它可以用来指定Application的名称,任务需要的CPU核数/内存大小,调优需要的配置等等。
val conf = new SparkConf()
conf.setAppName("WordCount")
val sc = new SparkContext(conf)
这三行语句创建了一个Spark上下文,并且运行时这个Application的名字就叫WordCount。
弹性分布式数据集RDD
Spark中最主要的编程概念就是弹性分布式数据集 (resilient distributed dataset,RDD),它是元素的集合,划分到集群的各个节点上,可以被并行操作。RDD的创建可以从HDFS(或者任意其他支持Hadoop文件系统) 上的一个文件开始,或者通过转换Master中已存在的Scala集合而来。
val file = "hdfs://127.0.0.1:9000/file.txt"
val lines = sc.textFile(file)
这两行语句从hdfs文件中创建了叫lines的RDD,它的每个元素就对应文件中的每一行,有了RDD我们就可以通过它提供的各种API来完成需要的业务功能。
RDD提供的API分为两类:转换(Transformation)和动作(Action)。
转换
顾名思义,转换就是把一个RDD转换成另一个RDD。当然,光是拷贝产生一个新的RDD是没有太大意义的,这里的转换实际上是RDD中元素的映射和转换。有一点必须要注意的是,RDD是只读的,一旦执行转换,一定会生成一个新的RDD。
val words = lines.flatMap(_.split("\\s+"))
flatMap是RDD众多转换中的一种,它的功能是把源RDD中的元素映射成目的RDD中的0个或者多个元素。上面语句把以文本行为元素的RDD转换成了以单个单词为元素的RDD。
动作
“动作”就不好望文生义了,可以简单地理解成想要获得结果时调用的API。
val wordCount = words.countByValue()
countByValue就是一个“动作”,它的功能是统计RDD中每个元素出现的次数,最终得到一个元素及其出现次数的Map。
那究竟哪些API是转换,哪些是动作呢?有个很简单的判断准则:
提示:返回结果为RDD的API是转换,返回结果不为RDD的API是动作。
运行
要运行Spark任务,首先要把代码打成JAR包,额。。。这个不需要多言。
打包后,就只需在Spark集群上以命令行的方式用spark-submit提交就OK。
spark-submit --class "demo.WordCount" SparkDemo-1.0-SNAPSHOT.jar
其中demo.WordCount是main函数所在的ojbect,而SparkDemo-1.0-SNAPSHOT.jar就是打出来的jar包。
大数据处理,就这样入门了。
下一篇文章我们将来探讨WordCount是如何在集群中运行的,Spark究竟隐藏了些什么魔法。
推荐
查看《Spark大数据处理》系列文章,请进入YoyaProgrammer公众号,点击 核心技术,点击 Spark大数据处理。
分类 Spark大数据处理
优雅程序员 原创 转载请注明出处
最新文章
- kylin(二): Calcite
- LED驅動芯片 兩種恒流控制方式
- Activity小结
- PowerDesigner Mysql 主键自增、初始值、字符集
- caffe网络中屏蔽某一层的输出Silence层
- HGOI 20190310 题解
- EF Core中的多对多映射如何实现?
- web-msg-send 学习 http://www.workerman.net/web-sender
- 【洛谷】【搜索+剪枝】P1731 [NOI1999]生日蛋糕
- Java web错误总结~
- Unity中HideInInspector和SerializeField以及Serializable
- flume学习笔记
- zoj3732&;&; hdu4797 Graph Reconstruction
- dbms_sqltune.report_sql_monitor 自动调优
- NAT alg 和 ASPF
- Codeforces 895.E Eyes Closed
- [bzoj1024][SCOI2009]生日快乐 (枚举)
- Atitit. 有限状态机 fsm 状态模式
- ubuntu系统操作
- 我的第五个程序 java的JDBC连接mysql数据库 实现输入查询
热门文章
- PATL2-007. 家庭房产-并查集
- 2016.2.28 DataTable用法汇总
- SUSE 设置IP地址、网关、DNS
- 解决springMVC文件上传报错: The current request is not a multipart request
- Delphi Cookie
- hbase.client.RetriesExhaustedException: Can't get the locations hive关联Hbase查询报错
- div盒子模型
- day70-oracle 13-数据字典
- css知多少(9)——float下篇(转)
- String/StringBuilder 类 统计字符串中字符出现的次数