栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Spark3教程(五)IDEA下Java开发Spark词频统计

Spark3教程(五)IDEA下Java开发Spark词频统计

        上一篇文章中,使用了Scala开发了词频统计,本篇文章我们使用Java开发同样的词频统计,借以对比两门语言的不同。
        数据依然存在于某个盘符文件下,具体看代码,内容是:

apple orange pear
banana lemon apple 
pear peach orange

一、创建我们熟悉的Maven Java Module:

二、修改pom.xml
1,修改JDK为1.8

1.8

2,添加Spark依赖:


    org.apache.spark
    spark-core_2.12
    3.1.2

3,开发Java代码,具体看注释:

package com.alan;

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.*;
import scala.Tuple2;
import java.util.*;
import java.util.regex.Pattern;

public class Test1 {
    private static final Pattern SPACE = Pattern.compile(" ");
    public static void main(String[] args) {
        SparkConf conf = new SparkConf().setAppName("WordCount").setMaster("local");
        JavaSparkContext sparkContext = new JavaSparkContext(conf);
        //读文件
        JavaRDD lines = sparkContext.textFile("d://test/words.txt").cache();
       //读取行,并将单词成集合
        JavaRDD words = lines.flatMap(new FlatMapFunction() {
            @Override
            public Iterator call(String s) {
                return Arrays.asList(SPACE.split(s)).iterator();
            }
        });
      //map
        JavaPairRDD wordsones = words.mapToPair(new PairFunction() {
            @Override
            public Tuple2 call(String s) {
                return new Tuple2(s, 1);
            }
        });
       //reduce
        JavaPairRDD wordsCounts = wordsOnes.reduceByKey(new Function2() {
            @Override
            public Integer call(Integer value, Integer toValue) {
                return value + toValue;
            }
        });
        //控制台打印
        wordsCounts.foreach(new VoidFunction>() {
            @Override
            public void call(Tuple2 tuple) throws Exception {
                System.out.println( tuple._1()+" "+tuple._2());
            }
        });
      //  wordsCounts.saveAsTextFile("d:/test/spark_word");
    }
}

        从上可见有非常多的匿名内部类,伪函数式编程风格以及Scala的标识符语法,毕竟Spark是由Scala开发的,虽然Scala最终是编译成Java Class,但是在Spark下写Java,感觉是在去适用Scala。
        如果精通Lambda,对其改写,代码会少点。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/673486.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号