Spark-java版
SparkContext初始化
相关知识
- SparkConf 是
SparkContext的构造参数,储存着Spark相关的配置信息,且必须指定Master(比如Local)和AppName(应用名称),否则会抛出异常; - SparkContext 是程序执行的入口,一个
SparkContext代表一个Application。
初始化过程的主要核心:
- 依据
SparkConf创建一个Spark执行环境SparkEnv; - 创建并初始化
Spark UI,方便用户监控,默认端口为4040; - 设置
Hadoop相关配置及Executor环境变量; - 创建和启动
TaskScheduler,DAGScheduler。
初始化方式:
SparkConf conf = new SparkConf().setAppName(appName).setMaster(master)JavaSparkContext sc=new JavaSparkContext(conf)
程序运行完后需使用sc.stop()关闭SparkContext。
import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.SparkConf; import java.util.Arrays; import java.util.List;public class Edu {public static void main(String[] args) {/********** Begin **********///第一步:设置SparkConfSparkConf conf = new SparkConf().setAppName("educoder").setMaster("local");//第二步:初始化SparkContextJavaSparkContext sc = new JavaSparkContext(conf);/********** End **********/List<String> data = Arrays.asList("hello");JavaRDD<String> r1 = sc.parallelize(data);System.out.print(r1.collect());/********** Begin **********///第三步:关闭SparkContextsc.stop();/********** End **********/} }
集合并行化创建RDD
任务描述
本关任务:计算并输出各个学生的总成绩。
相关知识
为了完成本关任务,你需要掌握:1.集合并行化创建RDD,2.reduceByKey。
集合创建RDD
Spark会将集合中的数据拷贝到集群上去,形成一个分布式的数据集合,也就是一个RDD。相当于是,集合中的部分数据会到一个节点上,而另一部分数据会到其他节点上。然后就可以用并行的方式来操作这个分布式数据集合,即RDD。
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
JavaRDD<Integer> rdd = sc.parallelize(list,3);//参数1:Seq集合,必须。参数2:分区数,默认为该Application分配到的资源的CPU核数Integer sum = rdd.reduce((a, b) -> a + b);System.out.print(sum);
输出:6
reduceByKey()
对元素为RDD[K,V]对的RDD中Key相同的元素的Value进行聚合。
List<Tuple2<String,Integer>> list = Arrays.asList(new Tuple2("hive",2),new Tuple2("spark",4),new Tuple2("hive",1));
JavaPairRDD<String, Integer> listRDD = sc.parallelizePairs(list);
List<Tuple2<String, Integer>> result = listRDD.reduceByKey((x, y) -> x + y).collect();
输出: (spark,4) (hive,3)
collect() :以数组的形式返回RDD中的所有元素,收集分布在各个worker的数据到driver节点。
编程要求
根据提示,在右侧编辑器begin-end处补充代码,计算并输出各个学生的总成绩。
("bj",88):bj指学生姓名,88指学生成绩。
测试说明
平台会对你编写的代码进行测试:
预期输出: (bj,254) (sh,221) (gz,285)
package step1;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaSparkContext;
import scala.Tuple2;
import java.util.*;
public class JStudent {public static void main(String[] args) {SparkConf conf = new SparkConf().setMaster("local").setAppName("JStudent");JavaSparkContext sc = new JavaSparkContext(conf);List<Tuple2<String,Integer>> list = Arrays.asList(new Tuple2("bj",88),new Tuple2("sh",67),new Tuple2("gz",92),new Tuple2("bj",94),new Tuple2("sh",85),new Tuple2("gz",95),new Tuple2("bj",72),new Tuple2("sh",69),new Tuple2("gz",98));//第一步:创建RDDJavaPairRDD<String, Integer> listRDD = sc.parallelizePairs(list);//第二步:把相同key的进行聚合JavaPairRDD<String, Integer> result = listRDD.reduceByKey((x, y) -> x + y);//第三步:收集List<Tuple2<String, Integer>> collect = result.collect();//第四步:输出for (Tuple2 c:collect){System.out.println(c);}sc.stop();}
}
读取外部数据集创建RDD
任务描述
本关任务:读取文本文件,按照文本中数据,输出老师及其出现次数。
相关知识
为了完成本关任务,你需要掌握:1.读取文件创建RDD,2.本关所需算子。
读取文件
textFile()
JavaRDD<String> rdd = sc.textFile("/home/student.txt")//文件路径
算子
(1)mapToPair:此函数会对一个RDD中的每个元素调用f函数,其中原来RDD中的每一个元素都是T类型的,调用f函数后会进行一定的操作把每个元素都转换成一个<K2,V2>类型的对象
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
JavaRDD<Integer> rdd = sc.parallelize(list);
JavaPairRDD<Integer,String> result = rdd.mapToPair(x -> new Tuple2(x,1)
输出:(1,1)(2,1)(3,1)
(2) reduceByKey() :对元素为RDD[K,V]对的RDD中Key相同的元素的Value进行聚合
List<Tuple2<String,Integer>> list = Arrays.asList(new Tuple2("hive",2),new Tuple2("spark",4),new Tuple2("hive",1));
JavaPairRDD<String, Integer> listRDD = sc.parallelizePairs(list);
List<Tuple2<String, Integer>> result = listRDD.reduceByKey((x, y) -> x + y).collect();
输出: (spark,5) (hive,3)
编程要求
根据提示,在右侧编辑器begin-end处补充代码,输出老师姓名和出现次数。
- 输入文件样例:
bigdata,laozhang bigdata,laoduan javaee,xiaoxu
bigdata指科目,laozhang指老师名称。
预期输出: (laoliu,1) (laoli,3) (laoduan,5) (laozhang,2) (laozhao,15) (laoyang,9) (xiaoxu,4)
package step2;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 scala.Tuple2;import java.util.Arrays;
import java.util.List;public class JTeachers {public static void main(String[] args) {SparkConf conf = new SparkConf().setMaster("local").setAppName("JTeachers");JavaSparkContext sc = new JavaSparkContext(conf);String dataFile = "file:///root/step2_files";//第一步:以外部文件方式创建RDDJavaRDD<String> teaRDD = sc.textFile(dataFile);//String name = line.split(",")[1];//第二步:将文件中每行的数据切分,得到自己想要的返回值Integer one = 1;JavaPairRDD<String, Integer> teacher = teaRDD.mapToPair(line ->{String names = line.split(",")[1];Tuple2<String, Integer> t2 = new Tuple2<>(names, one);return t2;});//第三步:将相同的key进行聚合JavaPairRDD<String, Integer> tea = teacher.reduceByKey((x, y) -> x + y);//第四步:将结果收集起来List<Tuple2<String, Integer>> result = tea.collect();//第五步:输出for (Tuple2 t:result){System.out.println(t);}sc.stop();}
}
map算子完成转换操作
相关知识
为了完成本关任务,你需要掌握:如何使用map算子。
map
将原来RDD的每个数据项通过map中的用户自定义函数f映射转变为一个新的元素。

图中每个方框表示一个RDD分区,左侧的分区经过自定义函数f:T->U映射为右侧的新RDD分区。但是,实际只有等到Action算子触发后,这个f函数才会和其他函数在一个Stage中对数据进行运算。
map 案例
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
System.out.println("init:" + list);
JavaRDD<Integer> rdd = sc.parallelize(list);
JavaRDD<Integer> map = rdd.map(x -> x * 2);
System.out.println("result :" + map.collect());
输出:
init :[1, 2, 3, 4, 5, 6] result :[2, 4, 6, 8, 10, 12]

说明:rdd1的元素(1 , 2 , 3 , 4 , 5 , 6)经过map算子(x -> x*2)转换成了rdd2(2 , 4 , 6 , 8 , 10)
编程要求
根据提示,在右侧编辑器begin-end处补充代码,完成以下需求:
需求1:使用map算子,将rdd的数据(1, 2, 3, 4, 5)按照下面的规则进行转换操作,规则如下:
-
偶数转换成该数的平方;
-
奇数转换成该数的立方。
需求2:使用map算子,将rdd的数据("dog", "salmon", "salmon", "rat", "elephant")按照下面的规则进行转换操作,规则如下:
- 将字符串与该字符串的长度组合成一个元组,例如
dog --> (dog,3)salmon --> (salmon,6)package net.educoder; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import scala.Tuple2; import java.util.Arrays; import java.util.List; public class Step1 {private static SparkConf conf;private static JavaSparkContext sc;static {conf = new SparkConf().setAppName("Step1").setMaster("local");sc = new JavaSparkContext(conf);}/*** 返回JavaRDD** @return JavaRDD*/public static JavaRDD<Integer> MapRdd() {List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);JavaRDD<Integer> rdd = sc.parallelize(list);/**** 需求:使用map算子,将rdd的数据进行转换操作* 规则如下:* 偶数转换成该数的平方* 奇数转换成该数的立方**//********** begin ***********/JavaRDD<Integer> map = rdd.map(num -> {if (num % 2 == 0) {return num * num;} else {return num * num * num;}});return map;/********** end ***********/}/*** 返回JavaRDD** @return JavaRDD*/public static JavaRDD<Tuple2> MapRdd2() {List<String> list = Arrays.asList("dog", "salmon", "salmon", "rat", "elephant");JavaRDD<String> rdd = sc.parallelize(list);/**** 需求:使用map算子,将rdd的数据进行转换操作* 规则如下:* 将字符串与该字符串的长度组合成一个元组,例如:dog --> (dog,3),salmon --> (salmon,6)**//********** begin ***********/JavaRDD<Tuple2> map = rdd.map(str -> {int i = str.length();return new Tuple2(str, i);});return map;/********** end ***********/} }
相关文章:
Spark-java版
SparkContext初始化 相关知识 SparkConf 是SparkContext的构造参数,储存着Spark相关的配置信息,且必须指定Master(比如Local)和AppName(应用名称),否则会抛出异常;SparkContext 是程序执行的入口…...
RabbitMQ消息模型之Work Queues
Work Queues Work Queues,也被称为(Task Queues),任务模型,也是官网给出的第二个模型,使用的交换机类型是直连direct,也是默认的交换机类型。当消息处理比较耗时的时候,可能生产消息…...
vue3+ts 实现时间间隔选择器
需求背景解决效果视频效果balancedTimeElement.vue 需求背景 实现一个分片的时间间隔选择器,需要把显示时间段显示成图表,涉及一下集中数据转换 [“02:30-05:30”,“07:30-10:30”,“14:30-17:30”]‘[(2,5),(7,10),(14,17)]’[4, 5, 6, 7, 8, 9, 10, …...
PTA 魔法优惠券
7-83 魔法优惠券 分数 25 全屏浏览题目 作者 陈越 单位 浙江大学 在火星上有个魔法商店,提供魔法优惠券。每个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送…...
P8A110-A120经典赛题
Web应用程序SQL Inject安全攻防 任务环境说明: 服务器场景:WebServ2003(用户名:administrator;密码:空)服务器场景操作系统:Microsoft Windows2003 Server 服务器场景安装服务/工…...
文件基础知识
计算机中的流:在C语言中将通过输入/输出设备(键盘、内存、显示器、网络等)之间的数据传输抽象表述为“流”。 1、文本流和二进制流 在文本流中输入输出的数据是一系列的字符,可以被修改在二进制流中输入输出数据是一系列字节&am…...
二叉树OJ题之二
今天我们一起来看一道判断一棵树是否为对称二叉树的题,力扣101题, https://leetcode.cn/problems/symmetric-tree/ 我们首先先来分析这道题,要判断这道题是否对称,我们首先需要判断的是这颗树根节点的左右子树是否对称࿰…...
MySql表中添加emoji表情
共五处需要修改。 语句执行修改: ALTER TABLE xxxxx CONVERT TO CHARACTER SET utf8mb4;...
【新手解答1】深入探索 C 语言:变量名、形参 + 主调函数、被调函数 + 类和对象 + 源文件(.c 文件)、头文件(.h 文件)+ 库
C语言的相关问题解答 写在最前面目录 问题1变量名与变量的关系与区别变量和数据类型形参(形式参数)的概念 问题2解析:主调函数和被调函数延伸解析:主调函数对于多文件程序的理解总结 问题3类和对象变量和数据类型变量是否为抽象的…...
2023最新的软件测试热点面试题(答案+解析)
📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…...
NCo3.1(08) - Nco3 服务器端编程
本篇博文不再重复ABAP调用外部服务器的基础,只介绍 NCo3 开发的过程和要点。需要了解相关知识点的小伙伴们自行参考: SAP接口编程 之JCo3.0系列(06) - Jco服务器端编程 PyRFC 服务器端编程要点 创建项目 新建一个 Console 项目,选择 .Net …...
【代码随想录】算法训练计划36
贪心 1、435. 无重叠区间 题目: 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 思路: 贪心,重叠个数,和射气球一样,重叠区间…...
Python (十五) 面向对象之多继承问题
程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…...
广域网加速技术
摘要: 随着企业数字化转型快速发展,越来越多企业将IT系统、应用和服务部署到云上,以实现更高效、灵活的管理和使用。这就对广域网提出了更高的要求,而广域网线路往往存在带宽费用昂贵、服务质量不可靠等问题。为了改善用户体验&am…...
构建智能医患沟通:陪诊小程序开发实战
在医疗科技的浪潮中,陪诊小程序的开发成为改善医患沟通的创新途径之一。本文将介绍如何使用Node.js和Express框架构建一个简单而强大的陪诊小程序,实现患者导诊和医生咨询功能。 1. 安装Node.js和Express 首先确保已安装Node.js,然后使用以…...
插入区间[中等]
优质博文:IT-BLOG-CN 一、题目 给你一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。 示例 1&#x…...
Android Bitmap 模糊效果实现 (二)
文章目录 Android Bitmap 模糊效果实现 (二)使用 Vukan 模糊使用 RenderEffect 模糊使用 GLSL 模糊RS、Vukan、RenderEffect、GLSL 效率对比 Android Bitmap 模糊效果实现 (二) 本文首发地址 https://blog.csdn.net/CSqingchen/article/details/134656140 最新更新地址 https:/…...
初识Java 18-4 泛型
目录 泛型存在的问题 在泛型中使用基本类型 实现参数化接口 类型转换和警告 无法实现的重载 基类会劫持接口 自限定类型 奇异递归类型 自限定 自限定提供的参数协变性 本笔记参考自: 《On Java 中文版》 泛型存在的问题 接下来讨论的,是在泛型…...
家政保洁预约小程序app开发特点有哪些?
家政预约服务小程序APP开发的特点介绍; 1. 低成本:用户通过手机APP下单,省去了中介费用,降低了雇主的雇佣成本。 2. 高收入:家政服务人员通过手机APP接单,省去了中介费用,从而提高了服务人员的…...
【JavaEE初阶】 HTTP响应报文
文章目录 🌲序言🎍200 OK🍀404 Not Found🎄403 Forbidden🌴405 Method Not Allowed🎋500 Internal Server Error🌳504 Gateway Timeout🌲302 Move temporarily🎍301 Move…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
