基于Java的Spark WordCount编程实现
来源:互联网 发布:青年政治学院 知乎 编辑:程序博客网 时间:2024/05/24 07:12
刚开始接触Spark编程,以WordCount作为入门编程实例,WordCount是用于统计单词出现的次数。本文参考http://blog.csdn.net/gongpulin/article/details/51534754,不同的是本文以Java语言实现实例的编程实现。
a、案例分析
对于词频数统计,用 Spark 提供的算子来实现,我们首先需要将文本文件中的每一行转化成一个个的单词, 其次是对每一个出现的单词进行记一次数,最后就是把所有相同单词的计数相加得到最终的结果。
对于第一步我们自然的想到使用 flatMap 算子把一行文本 split 成多个单词,然后对于第二步我们需要使用 map 算子把单个的单词转化成一个有计数的 Key-Value 对,即 word -> (word,1). 对于最后一步统计相同单词的出现次数,我们需要使用 reduceByKey 算子把相同单词的计数相加得到最终结果。
b、编程实现
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;import scala.actors.threadpool.Arrays;import java.util.ArrayList;import java.util.List;import java.util.regex.Pattern;/** * Created by Administrator on 2017/10/30. */public class WordCount { private static final Pattern SPACE = Pattern.compile(" "); public static void main(String[] args) throws Exception { SparkConf conf =new SparkConf().setAppName("WordCount").setMaster("local"); JavaSparkContext sc = new JavaSparkContext(conf); //数据内容 List<String> dataList = new ArrayList<String>(); dataList.add("one,one,two,hello,world"); dataList.add("hello,world,one,two,three"); JavaRDD<String> list1 = sc.parallelize(dataList); //数据分片 JavaRDD<String> words = list1.flatMap(new FlatMapFunction<String, String>() { @Override public Iterable<String> call(String s) throws Exception { return Arrays.asList(s.split(",")); } }); //数据转化为 对 JavaPairRDD<String,Integer> wordsMap = words.mapToPair(new PairFunction<String, String, Integer>() { @Override public Tuple2<String, Integer> call(String s) throws Exception { return new Tuple2(s,1); } }); //求和 JavaPairRDD<String,Integer> wordsReduce = wordsMap.reduceByKey(new Function2<Integer, Integer, Integer>() { @Override public Integer call(Integer arg0, Integer arg1) throws Exception { return arg0 + arg1; } }); //将RDD类型转化为List类型 List<Tuple2<String, Integer>> output = wordsReduce.collect(); for (Tuple2<?, ?> tuple : output) { System.out.println(tuple._1() + ": " + tuple._2()); } sc.stop(); }}
c、运行结果
结束语
通过本文,完成基于Java对WordCount简单实例的编程实现,理解每一句代码含义,打好基础。
由于时间仓促并且本人知识水平有限,如有遗漏甚至是错误的地方,希望各位朋友不吝赐教。有任何问题,都可以在文末留下您的评论,我会及时回复。
阅读全文
0 0
- 基于Java的Spark WordCount编程实现
- Spark基于排序机制的wordcount程序(Java版)
- Spark 的JAVA版 wordCount
- 基于Java的spark年龄统计实例编程实现
- Spark核心编程:高级编程之基于排序机制的wordcount程序
- Spark:用Scala和Java实现WordCount
- Spark:用Scala和Java实现WordCount
- Spark:用Scala和Java实现WordCount
- Spark:用Scala和Java实现WordCount
- Spark:用Scala和Java实现WordCount
- Spark:用Scala和Java实现WordCount
- Spark:用Scala和Java实现WordCount
- Java实现Spark词配对Wordcount计数
- Spark之WordCount(Java代码实现)
- Spark:用Java和Scala实现WordCount
- 基于Jupyter平台通过python实现Spark的应用程序之wordCount
- Spark pipe + PHP 的 wordcount 实现
- java8实现spark streaming的wordcount
- OpenCV学习第七篇:调整图像亮度和对比度
- boost在Android平台的编译ubuntu16.04 ndk-r15
- Android
- 算法期中1002. 合并二叉树
- 工作小窍门;)
- 基于Java的Spark WordCount编程实现
- AngularJs-指令和控制器交互
- 情感分析
- SSM框架-MyBatis进阶篇(一)
- MVP+XRecyclerView+okhttp+glide,列表或者网格显示所加载的数据
- 计算1*2*3*+3*4*5+……+99*100*101的值
- Python中filter()实现找回文数字
- HDU 1074 Doing Homework(状压dp+记录路径)
- Excel地图插件v1.2版本发布