spark wordcount及常用算子

本文详细介绍了一种使用Apache Spark和Java实现WordCount程序的方法,包括代码解析和关键步骤说明,如读取文件、数据切割、计数及结果输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 Javawordcount 直接上代码

public class Testwordcount {
    private static final Pattern SPACE = Pattern.compile(" ");//定义分割的类型

    public static void main(String[] args) {
        String logFile = "D:\\ab.txt";
        SparkConf conf = new SparkConf().setMaster("local").setAppName("TestSpark");
        JavaSparkContext sc = new JavaSparkContext(conf); 

        JavaRDD<String> logData = sc.textFile(logFile).cache(); //读取文件中的数据并缓存到内存

        JavaRDD<String> words = logData.flatMap(new FlatMapFunction<String, String>() { //将数据进行切割 实例中是以空格切割

            public Iterator<String> call(String s) {
                List<String> list = Arrays.asList(SPACE.split(s));
                Iterator<String> ss = list.iterator();
                return ss;
            }
        });

        JavaPairRDD<String, Integer> countss = words.mapToPair(new PairFunction<String, String, Integer>() {
            public Tuple2<String, Integer> call(String s) throws Exception {
                return new Tuple2<String, Integer>(s, 1);
            }
        }).reduceByKey(new Function2<Integer, Integer, Integer>() {
            public Integer call(Integer integer, Integer integer2) throws Exception {
                return integer + integer2;
            }
        });


       // countss.saveAsTextFile(outfile);

             List<Tuple2<String, Integer>> output = countss.collect();
             for (Tuple2<?, ?> tuple : output) {
                  System.out.println(tuple._1() + ": " + tuple._2());
                 }


        sc.close();

    }
}

文件中的数据
flume sd hadoop hbase kylin hdfs hadoop sd sd flume hdfs

执行的结果
20/05/12 10:10:47 INFO TaskSetManager: Finished task 0.0 in stage 1.0 (TID 1) in 23 ms on localhost (executor driver) (1/1)
20/05/12 10:10:47 INFO TaskSchedulerImpl: Removed TaskSet 1.0, whose tasks have all completed, from pool 
20/05/12 10:10:47 INFO DAGScheduler: ResultStage 1 (collect at Testwordcount.java:58) finished in 0.024 s
20/05/12 10:10:47 INFO DAGScheduler: Job 0 finished: collect at Testwordcount.java:58, took 0.255136 s
hadoop: 2
flume: 2
kylin: 1
hdfs: 2
sd: 3
hbase: 1

2常用算子的使用

转化类算子
flatMap 将数据进行切割 有一变多的作用

logData.flatMap(new FlatMapFunction<String, String>() {

            public Iterator<String> call(String s) {
                List<String> list = Arrays.asList(SPACE.split(s));
                Iterator<String> ss = list.iterator();
                return ss;
            }

parallelize和makeRDD 都是将数据转化成RDD makeRDD的底层是parallelize
举例:将 list变成RDD

ArrayList<String> list = new ArrayList<String>();list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");

        JavaRDD<String> parallelize = sc.parallelize(list);

        JavaRDD<String> filter = parallelize.filter(new Function<String, Boolean>() {
            @Override
            public Boolean call(String s) throws Exception {
                if (s.equals("2")) {
                    return false;
                }
                return true;
            }
        });

        List<String> collect = filter.collect();
        System.out.println(collect);

filter 算子 过滤作用 返回类型是Boolen false是过滤 true是数据通过

JavaRDD<String> filter = parallelize.filter(new Function<String, Boolean>() {
            @Override
            public Boolean call(String s) throws Exception {
                if (s.equals("2")) {
                    return false;
                }
                return true;
            }
        });

acction 算子

first 获取所有数据的第一个元素
count 计算处理之后行数
saveAsTextFile 输出到某个文件中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值