博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark的JavaWordCount例子
阅读量:6271 次
发布时间:2019-06-22

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

hot3.png

JavaWordCount的例子很简单,就是利用spark的API统计单词出现的次数。网络上很多人都拿它来当案例。但是,我没看到有人解释spark的API怎么做并发处理的细节。于是,我就自己动手做实验,增加了一些打印信息。果然,看到了多线程并发处理的情况。Spark程序不是串行地处理,而是在收集了两行数据之后就开始多线程并发处理。有些和CUDA程序类似。

JAVA的主要代码:

//处理每一行数据的函数

JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {

      @Override

      public Iterator<String> call(String s) {

      System.out.println("FlatMapFunction s="+s);

        return Arrays.asList(SPACE.split(s)).iterator();

      }

    });

//分割每一行成多个key

    JavaPairRDD<String, Integer> ones = words.mapToPair(

      new PairFunction<String, String, Integer>() {

        @Override

        public Tuple2<String, Integer> call(String s) {

        System.out.println("PairFunction s="+s);

          return new Tuple2<>(s, 1);

        }

      });

//根据key归约统计数字

    JavaPairRDD<String, Integer> counts = ones.reduceByKey(

      new Function2<Integer, Integer, Integer>() {

        @Override

        public Integer call(Integer i1, Integer i2) {

        System.out.println("reduceByKey count="+(i1+i2));

          return i1 + i2;

        }

      });

整段代码看起来像是串行执行的,实际上是并发执行的。

 

需要统计的文件内容:

good bad cool

hadoop spark mlib good

good spark mlib spark

cool spark bad

 

JavaWordCount的运行输出:

FlatMapFunction s=good bad cool

PairFunction s=good

PairFunction s=bad

PairFunction s=cool

FlatMapFunction s=hadoop spark mlib good

PairFunction s=hadoop

PairFunction s=spark

PairFunction s=mlib

PairFunction s=good

reduceByKey count=2

FlatMapFunction s=good spark mlib spark

PairFunction s=good

reduceByKey count=3

PairFunction s=spark

reduceByKey count=2

PairFunction s=mlib

reduceByKey count=2

PairFunction s=spark

reduceByKey count=3

FlatMapFunction s=cool spark bad

PairFunction s=cool

reduceByKey count=2

PairFunction s=spark

reduceByKey count=4

PairFunction s=bad

reduceByKey count=2

 

从上面的打印信息可以看到,当FlatMapFunction处理完第二行数据的时候,reduceByKey线程就开始工作了。直接进入并发模式,不需要等到FlatMapFunction处理完所有的行。这样计算的效率大幅提高,节省了很多等待时间。

值得注意的是,hadoop这个单词只出现了一次,结果它没有触发reduceByKey的call函数调用。说明这个call函数是针对两个输入数据进行归约处理的。

 

转载于:https://my.oschina.net/qinhui99/blog/851749

你可能感兴趣的文章
WPF中的依赖项属性(转)
查看>>
linux防火墙相关 iptables
查看>>
最简单的单例模式
查看>>
JPopupMenu的使用以及JPopupMenu中子组件的事件处理
查看>>
从反汇编的角度看引用和指针的区别
查看>>
拓马长枪定乾坤
查看>>
UIProgressView的详细使用
查看>>
Silverlight实用窍门系列:70.Silverlight的视觉状态组VisualStateGroup
查看>>
照片筛选与上传功能
查看>>
Hello ZED
查看>>
常见web攻击方式
查看>>
hdu 4472
查看>>
oracle存储过程中is和as区别
查看>>
windows 2003 群集
查看>>
几个gcc的扩展功能
查看>>
Spark一个简单案例
查看>>
关于结构体占用空间大小总结(#pragma pack的使用)
查看>>
通过浏览器查看nginx服务器状态配置方法
查看>>
shell简介
查看>>
android 使用WebView 支持播放优酷视频,土豆视频
查看>>