spark程序解析——WordCount
来源:互联网 发布:啪啪视频下载软件 编辑:程序博客网 时间:2024/06/05 03:47
本篇解析spark的词频统计源程序代码。
java源码如下:
</pre><pre name="code" class="java">package sparkTest;import java.util.Arrays;import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaPairRDD;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.api.java.JavaSparkContext;import org.apache.spark.api.java.function.FlatMapFunction;import org.apache.spark.api.java.function.Function2;import org.apache.spark.api.java.function.PairFunction;import scala.Tuple2;public class WordCount {public static void main(String[] args) {String logFile = "file:///home/hadoop/workspace/sparkTest/input/README.md"; // Should be some file on your systemSparkConf conf = new SparkConf().setAppName("Simple Application").setMaster("local");JavaSparkContext sc = new JavaSparkContext(conf);JavaRDD<String> textFile = sc.textFile(logFile);//构建String型RDDJavaRDD<String> words = textFile.flatMap(new FlatMapFunction<String, String>() {//flatMap相对map,多了flattening环节:即将所有行返回的结果合并很一个对象public Iterable<String> call(String s) {return Arrays.asList(s.split(" "));}});JavaPairRDD<String, Integer> pairs = words.mapToPair(new PairFunction<String, String, Integer>() {//执行PairFunction,返回keyValue值对public Tuple2<String, Integer> call(String s) {return new Tuple2<String, Integer>(s, 1);}});JavaPairRDD<String, Integer> counts = pairs.reduceByKey(new Function2<Integer, Integer, Integer>() {//合并相同的Keypublic Integer call(Integer a, Integer b) {return a + b;}});counts.saveAsTextFile("file:///home/hadoop/workspace/sparkTest/output");//System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);}}
源码解析步骤:
1、textFile()之前,构建JavaRDD,String型的。
2、flatMap()对RDD元素进行操作并合并。不同于map(),flatMap的函数参数返回的必须是list等序列。官方文档解释如下:
flatMap(func)Similar to map, but each input item can be mapped to 0 or more output items (so func should return a Seq rather than a single item).
3、words.mapToPair(new PairFunction<String, String, Integer>())将flatMap结果转化成keyValue对。
4、pairs.reduceByKey(new Function2<Integer, Integer, Integer>())将mapToPair结果合并成最终结果。
5、saveAsTextFile(path)把最终结果存入path对应的文件中,可以是local file system、hadoop支持的其它文件系统、HDFS等。
注意:这里除了saveAsTextFile()是action操作,其他都属于Transformation.
输入文件内容如下:
# Apache SparkSpark is a fast and general cluster computing system for Big Data. It provides<http://spark.apache.org/>
(Spark,2)(provides,1)(is,1)(general,1)(a,1)(Big,1)(fast,1)(Apache,1)(#,1)(,2)(cluster,1)(Data.,1)(It,1)(for,1)(computing,1)(and,1)(<http://spark.apache.org/>,1)(system,1)
观察可知,实现了词频统计功能。
0 0
- spark程序解析——WordCount
- 第一个spark scala程序——wordcount
- spark RDD ,wordcount案例解析
- Spark--02WordCount代码解析
- spark快速入门与WordCount程序机制深度解析 spark研习第二季
- spark pairRDD基本操作(三)——附带wordcount程序
- MapReduce程序——wordCount
- hadoop入门程序wordcount 解析
- spark wordCount单词计数及原理解析
- spark(3)-wordcount原理解析
- Spark在Yarn上运行Wordcount程序
- Spark on Yarn上实现WordCount程序
- 用SBT编译Spark的WordCount程序
- sbt 编译spark 的wordcount 程序
- 用SBT编译Spark的WordCount程序
- Spark第一个程序开发 wordcount
- scala-eclipse 编写spark简单程序 WordCount
- 使用eclipse开发spark程序 wordcount 事例
- Maven项目下update maven后Eclipse报错:java.lang.ClassNotFoundException ContextLoaderL
- initWithCoder: 与initWithFrame:的区别[转]
- 模仿支付宝过年咻一咻效果
- Maven最佳实践:划分模块
- java异常处理
- spark程序解析——WordCount
- 归并排序——一步一步算法篇
- 分库分表水平切分注意事项
- const理解之一
- Android Monkey源码解析
- {题解}[jzoj3414]【NOIP2013模拟】开心小屋
- 选择排序
- axml格式
- Contains Duplicate II