小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

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

# Spring Boot,spark,spring boot,java 额外说明

收录于:18天前

环境搭建

自己查资料了解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和context,在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;
    }
}

上述计算的逻辑代码应该放在service层,这里为了演示目的。

以下是词频统计的核心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();
. . .

相关推荐

额外说明

APICloud(十三):使用jpush进行消息推送

前言: 最近APP上要添加推送的功能,而APICloud的模板库中有推送的模块,比较之后决定用极光推送,模块名称叫ajpush,添加到自己的项目就可以用了。使用文档官方也有,虽说方法讲的比较细,但是感觉缺少连贯性,做了第一步下一步应该干什么用什么方法就迷

额外说明

大梦数据库按模式备份、导出、导入、迁移实践

一、linux平台 我们再生产生活中,实际需求需要把数据库进行迁移。本文介绍最常见按整个模式导出导入的实例。最常用。 首先要把A、B 2个服务器装好达梦8,并且权限一致,用户完全一致,基础编码、大小写参数完全一致。 参数 配置值 PATH /dmdata

额外说明

day04--vue-element-admin (05)

一、vue-element-admin 1、简介 而vue-element-admin是基于element-ui 的一套后台管理系统集成方案。 功能:https://panjiachen.github.io/vue-element-admin-site/

额外说明

uniapp实战——完成安卓打包

QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群649347320 共享学习 QQ群674240731 纪年科技am

额外说明

25种代码坏味道总结

前言 什么样的代码是好代码呢?好的代码应该命名规范、可读性强、扩展性强、健壮性......而不好的代码又有哪些典型特征呢?这25种代码坏味道大家要注意啦 1. Duplicated Code (重复代码) 重复代码就是不同地点,有着相同的程序结构。一般是

额外说明

Unity实战项目 ☀️| 教你如何在Unity中通过 代码获取 URL链接网页 的 标题 等各种信息✨

-博客主页:https://blog.csdn.net/zhangay1998 -欢迎点赞 - 收藏 ⭐留言 - 如有错误敬请指正! -本文由 呆呆敲代码的小Y 原创,首发于 CSDN- -未来很长,值得我们全力奔赴更美好的生活✨ 目录 -如何在Unit

额外说明

舔狗的救赎:学最牛的技术,做最强的舔狗

更多文章请点击 项目地址 文章目录 1. 我是一个舔狗 2. 爬取情话 2.1. 选取情话资源 2.2. 分析网页资源 2.2.1. 定位情话资源 2.2.2. 定位标签 2.2.3. 分析请求方式 2.3. 使用urllib库获取资源 2.3.1 安装

额外说明

面向切面编程实现Nestjs接口Api数据缓存

一、业务场景 在后端接口开发过程中,我们经常会谈论的话题,提高接口响应速度,前端接口调用后端接口响应时间的缩短,我们抛开数据库设计及后端代码的业务逻辑等问题。我们经常会听到说用redis做数据缓存,直接从内存中获取数据返回给客户端,减少后端程序对数据库的

额外说明

调和级数是发散的

文章目录 一、调和级数的定义 二、调和级数的性质 三、编程计算调和级数之和 四、演示几个收敛的级数 五、数学的特定领域 - 分析 六、数学的传统分支 (一)算术 (二)几何 (三)代数 (四)分析 一、调和级数的定义 形如 1 + 1 2 + 1 3 +

额外说明

java 五个有用的过滤器

一、使浏览器不缓存页面的过滤器     import javax.servlet.*;     import javax.servlet.http.HttpServletResponse;     import java.io.IOException; 

ads via 小工具