Spark中的wordCount程序实现

本文介绍如何使用Apache Spark框架进行大规模文本数据的词频统计。通过创建SparkConf配置并初始化JavaSparkContext,读取指定目录下的文本文件,利用flatMap函数将文本拆分为单词,再使用mapToPair函数将每个单词映射为(key, 1),最后通过reduceByKey函数聚合相同key的value,实现词频统计。
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.PairFunction;
import  scala.Tuple2;
 
import  java.util.Arrays;
import  java.util.List;
 
public  class  Main {
 
     public  static  void  main(String[] args) {
         //设置本地模式,不提交到集群运行,运行的名称为myapp
         SparkConf conf =  new  SparkConf().setMaster( "local" ).setAppName( "my app" );
         JavaSparkContext sc =  new  JavaSparkContext(conf);
         //设置文件的输入路径为/ok/test
         String inputFile= "/ok/test" ;
         JavaRDD<String> input = sc.textFile(inputFile);
         //设置词之间以 “ ”间隔
         JavaRDD<String> words = input.flatMap(
                 new  FlatMapFunction<String, String>() {
                     public  Iterable<String> call(String s)  throws  Exception {
                         return  Arrays.asList(s.split( " " ));
                     }
                 }
         );
         //设置每遇到一个单词,相应的计数加1
         JavaPairRDD<String, Integer> counts = words.mapToPair(
                 new  PairFunction<String, String, Integer>() {
                     public  Tuple2<String, Integer> call(String s)  throws  Exception {
                         return  new  Tuple2(s,  1 );
                     }
                 }
 
                 //设置遇到相同的词汇,将计数相加
         ).reduceByKey( new  org.apache.spark.api.java.function.Function2<Integer, Integer, Integer>() {
             public  Integer call(Integer integer, Integer integer2)  throws  Exception {
                 return  integer+integer2;
             }
         });
         //用列表来存储所有的单词-计数 pair
         List<Tuple2<String,Integer>> output =counts.collect();
         //遍历此链表
         for (Tuple2 tuple: output){
             System.out.println(tuple._1+ ": " +tuple._2);
         }
         //关闭集群
         sc.stop();
     }
}
输出:
689069-20151130182524890-1438204882.png




转载于:https://www.cnblogs.com/zhoudayang/p/5008005.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值