Spring boot项目实战——spark环境搭建及RDD运算

环境搭建

自行查阅资料了解spark的部署环境,本项目是本地环境,伪分布式的。

在window上使用spark必须现在本地搭建hadoop环境,具体请参考之前的文章windows上配置hadoop并通过idea连接本地spark和服务器spark

搭建完spark环境后正常创建spring boot程序,在启动类生产bean:

在这里插入图片描述

//生产bean
@Bean(name = "sc")
public JavaSparkContext makeSparkContext(){
    return new JavaSparkContext("local", "spark-container");
}

sparkcontext是rdd和上下文,在java中是JavaSparkContext,所有运算均基于该对象。

最好早启动程序中配置:

System.setProperty("hadoop.home.dir","D:\\SoftWares\\Apache\\spark-3.3.1-bin-hadoop3");防止找不到spark。

JavaSparkContext的使用


//doubles为一个浮点型数组

//内存中加载数据
JavaRDD<Double> rdd = sc.parallelize(doubles);

Double reduce = rdd.reduce((Function2<Double, Double, Double>) (aDouble, aDouble2) -> aDouble + aDouble2);

通过JavaSparkContext记载到内存中,通过reduce计算,返回计算结果。

代码的核心部分在于生产第一个RDD,通过parallelize方法。其他方法请参考Spark核心RDD详解(设计与运行原理,分区,创建,转换,行动与持久化)

构建好RDD后就可以通过rdd行动与转换操作数据了。


@RestController
@RequestMapping("/analyze")
public class SaleTotalController implements Serializable {

    @Resource
    private JavaSparkContext sc;

    //
    @GetMapping("/consumption")
    public SaleJson getTotal(){
        ReadCSV readCSV = new ReadCSV();
        List<String> columnList = readCSV.getColumnList("C:\\Users\\fireapproval\\Desktop\\数据集\\test.csv", 7);
        columnList.remove(0);

        //System.out.println(columnList);
        List<Double> doubles = new ArrayList<>();
        for (String str:columnList
             ) {
            doubles.add(Double.parseDouble(str));
        }
        //System.out.println(doubles);

        //System.out.println(doubles.get(2).getClass());

        //内存中加载数据
        JavaRDD<Double> rdd = sc.parallelize(doubles);

        Double reduce = rdd.reduce((Function2<Double, Double, Double>) (aDouble, aDouble2) -> aDouble + aDouble2);


        //System.out.println(reduce);

        SaleJson saleJson = new SaleJson();
        saleJson.setTotal(reduce);
        return saleJson;
    }
}

上述计算的逻辑代码应该放在服务层的,这里起演示作用。

如下为词频统计的核心RDD的操作:


JavaRDD<String> rdd = sc.parallelize(tmpList);

//JavaRDD<String> rdd1 = rdd.map(x -> x.concat("xxx"));

//转化为(word,1)类型
JavaPairRDD<String, Integer> wordMap = rdd.mapToPair((PairFunction<String, String, Integer>) word -> new Tuple2<String, Integer>(word, 1));

//对(word,1)计算  //必须要用匿名函数

JavaPairRDD<String, Integer> reduceMap = wordMap.reduceByKey((Function2<Integer, Integer, Integer>) (integer, integer2) -> integer + integer2);


//map接收rdd
Map<String, Integer> rddMap = reduceMap.collectAsMap();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
项目Spark离线处理本项目来源于企业级电商网站的大数据统计分析平台,该平台以 Spark 框架为核心,对电商网站的日志进行离线和实时分析。 该大数据分析平台对电商网站的各种用户行为(访问行为、购物行为、广告点击行为等)进行分析,根据平台统计出来的数据,辅助公司中的 PM(产品经理)、数据分析师以及管理人员分析现有产品的情况,并根据用户行为分析结果持续改进产品的设计,以及调整公司的战略和业务。最终达到用大数据技术来帮助提升公司的业绩、营业额以及市场占有率的目标。 本项目使用了 Spark 技术生态栈中最常用的三个技术框架,Spark Core、Spark SQL 和 Spark Streaming,进行离线计算和实时计算业务模块的开发。实现了包括用户访问 session 分析、页面单跳转化率统计、热门商品离线统计、广告流量实时统计 4 个业务模块。通过合理的将实际业务模块进行技术整合与改造,该项目几乎完全涵盖了 Spark Core、Spark SQL 和 Spark Streaming 这三个技术框架中大部分的功能点、知识点,学员对于 Spark 技术框架的理解将会在本项目中得到很大的提高。 项目Spark实时处理项目简介对于实时性要求高的应用,如用户即时详单查询,业务量监控等,需要应用实时处理架构项目场景对于实时要求高的应用、有对数据进行实时展示和查询需求时项目技术分别使用canal和kafka搭建各自针对业务数据库和用户行为数据的实时数据采集系统,使用SparkStreaming搭建高吞吐的数据实时处理模块,选用ES作为最终的实时数据处理结果的存储位置,并从中获取数据进行展示,进一步降低响应时间。 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xvwen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值