博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark WordCount的两种方式
阅读量:4960 次
发布时间:2019-06-12

本文共 3042 字,大约阅读时间需要 10 分钟。

Spark WordCount的两种方式。

语言:Java

工具:Idea

项目:Java Maven

pom.xml如下:

1.2.0
org.apache.spark
spark-core_2.10
${spark.version}

第一种方式,比较常规的按部就班的

package pairs;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 org.apache.spark.api.java.function.VoidFunction;import scala.Tuple2;import java.util.Arrays;public class WordCount1 {    public static void main(String[] args) {        SparkConf conf = new SparkConf().setMaster("local").setAppName("wordcount1");        JavaSparkContext sc = new JavaSparkContext(conf);        String filename = "D:\\tmp\\words.txt";        JavaRDD
input = sc.textFile(filename); JavaRDD
lines = input.flatMap(new FlatMapFunction
() { public Iterable
call(String s) throws Exception { return Arrays.asList(s.split(" ")); } }); //pairs JavaPairRDD
pairs = lines.mapToPair(new PairFunction
() { public Tuple2
call(String s) throws Exception { return new Tuple2
(s,1); } }); //reduce JavaPairRDD
counts = pairs.reduceByKey(new Function2
() { public Integer call(Integer x, Integer y) throws Exception { return x+y; } }); //output counts.foreach(new VoidFunction
>() { public void call(Tuple2
tuple2) throws Exception { System.out.println(tuple2); } }); sc.stop(); }}

代码输出:

(rose,2)(jack,3)

 

第二种更为简洁

package pairs;import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.api.java.JavaSparkContext;import org.apache.spark.api.java.function.FlatMapFunction;import java.util.Arrays;import java.util.Map;public class WordCount2 {    public static void main(String[] args) {        SparkConf conf = new SparkConf().setMaster("local").setAppName("wordcount2");        JavaSparkContext sc = new JavaSparkContext(conf);        String filename = "D:\\tmp\\words.txt";        JavaRDD
input = sc.textFile(filename); JavaRDD
lines = input.flatMap(new FlatMapFunction
() { public Iterable
call(String s) throws Exception { return Arrays.asList(s.split(" ")); } }); Map
result = lines.countByValue(); System.out.println(result); sc.stop(); }}

代码输出:

{rose=2, jack=3}

通过对比可以发现,第一种方式一直都是转化操作,最后打印的是Tuple2;而第二种方式变成了行动操作,直接输出Map<String,Long>。

具体有什么区别,或者效率上有啥不同,待后续深入学习。

 

参考资料:

《Spark快速大数据分析》

 

转载于:https://www.cnblogs.com/tobeymarshall/p/10215557.html

你可能感兴趣的文章
综合练习:词频统计
查看>>
BZOJ1026: [SCOI2009]windy数
查看>>
样板操作数
查看>>
64位UBUNTU下安装adobe reader后无法启动
查看>>
iTextSharp带中文转换出来的PDF文档显示乱码
查看>>
组件:slot插槽
查看>>
走进C++程序世界------异常处理
查看>>
Nginx配置文件nginx.conf中文详解(转)
查看>>
POJ 1988 Cube Stacking
查看>>
POJ 1308 Is It A Tree?(并查集)
查看>>
N进制到M进制的转换问题
查看>>
Android------三种监听OnTouchListener、OnLongClickListener同时实现即其中返回值true或者false的含义...
查看>>
MATLAB实现多元线性回归预测
查看>>
Mac xcode 配置OpenGL
查看>>
利用sed把一行的文本文件改成每句一行
查看>>
使用Asyncio的Coroutine来实现一个有限状态机
查看>>
Android应用开发:核心技术解析与最佳实践pdf
查看>>
python——爬虫
查看>>
2.2 标识符
查看>>
孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库
查看>>