一、按词频降序排序的WordCount思路分析
- WordCount,也叫词频统计程序是大数据里面一个最简单的入门程序,但是“麻雀虽小,五脏俱全”,WordCount涵盖了大数据处理的核心思想,因而非常之重要。而加入了排序功能之后的WordCount就更加具有价值了。现在分析按词频降序排序的WordCount使用Spark核心算子如何实现:
- 1.将源RDD使用flatMap算子进行一对多映射,将一行文本映射为多个单词输出输出为WordRDD;
- 2.对WordRDD使用map算子将每一个单词进行一对一映射为(word,1),生成wordPairRDD;
- 3.将worPairRDD使用reduceByKey算子,按照Kay进行聚合累加操作,生成count2WordRDD;
- 4.对count2WordRDD使用map算子,将(word,count)形式的元组,映射为(count,word)形式的元组,生成count2WordRDD;
- 5.对count2WordRDD使用sortByKey算子,按Key(词频)进行降序排序,生成count2WordSortedRDD。
- 6.对count2WordSortedRDD使用map算子将(count,word)形式的元组还原为(word,count)的元组,生成word2CountSortedRDD;
- 7.对word2CountSortedRDD使用collect算子,将统计结果收集到一个集合中。至此按词频降序排序的WordCount程序完成。
- 以下是按词频降序排序的WordCount程序的RDD血缘关系图:
二、使用Java编写程序
- 本次演示使用的Spark版本是:spark-2.1.0-bin-hadoop2.7
-
/** * Spark实现WordCount并按词频降序排序后输出的Java版本 */ public class WordCountByJava { public static void main(String[] args) { // 创建SparkConf SparkConf conf = new SparkConf() .setAppName("AggregateByKeyJava") // 使用本地模式 .setMaster("local") .set("spark.testing.memory","2147480000"); // 创建JavaSparkContext JavaSparkContext sc = new JavaSparkContext(conf); // 创建模拟数据 List<String> lines = new ArrayList<String>(); lines.add("你好 萧邦主 你好 spark"); lines.add("hello 萧邦主 你好 spark"); lines.add("hello 萧邦主 你好 hadoop"); lines.add("hello 萧邦主 hello hadoop"); lines.add("hello 萧邦主 hello hadoop")