头歌:RDD的创建 -Scala

第1关:集合并行化创建RDD


任务描述


本关任务:计算并输出各个学生的总成绩。

相关知识


为了完成本关任务,你需要掌握:1.集合并行化创建RDD,2.reduceByKey算子、foreach算子

集合创建RDD
Spark会将集合中的数据拷贝到集群上去,形成一个分布式的数据集合,也就是一个RDD。相当于是,集合中的部分数据会到一个节点上,而另一部分数据会到其他节点上。然后就可以用并行的方式来操作这个分布式数据集合,即RDD。

val list=List(1,2,3,4,5)
val stu=sc.parallelize(list,3)//参数1:Seq集合,必须。参数2:分区数,默认为该Application分配到的资源的CPU核数
//val stu=sc.makeRDD(list,3) //和parallelize用法一样。(该用法可以指定每一个分区的preferredLocations)。
val sum=stu.reduce(_+_)
println(sum)


输出:15

reduceByKey()
对元素为RDD[K,V]对的RDD中Key相同的元素的Value进行聚合

val list = List(("spark",2),("hive",1),("hive",2))
val stuRDD = sc.makeRDD(list)
stuRDD.reduceByKey(_+_)


输出:
(spark,2)
(hive,3)

foreach() :对数据集中每一个元素运行函数

val list = List(1,2,3,4)
val stuRDD = sc.makeRDD(list)
stuRDD.foreach(print)//对这个RDD进行遍历输出


输出:1234

编程要求
根据提示,在右侧编辑器begin-end处补充代码,计算并输出各个学生的总成绩。

("bj",88): bj指学生姓名,88指学生成绩。
测试说明
平台会对你编写的代码进行测试:

预期输出:

(bj,254)
(sh,221)
(gz,285)

import org.apache.spark.SparkContext
import org.apache.spark.SparkConfobject Student {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName(this.getClass.getSimpleName).setMaster("local")val sc = new SparkContext(conf)val arr1=Array(("bj",88),("sh",67),("gz",92))val arr2=Array(("bj",94),("sh",85),("gz",95))val arr3=Array(("bj",72),("sh",69),("gz",98))/********** begin **********/// 第一步:先将数组进行合并val combinedArr = arr1 ++ arr2 ++ arr3// 第二步:创建RDDval rdd = sc.parallelize(combinedArr)// 第三步:把相同key的进行聚合val totalScores = rdd.reduceByKey(_ + _)// 第四步:输出totalScores.collect().foreach(println)/********** end **********/sc.stop()}
}

这段代码首先创建了一个配置为本地模式的 SparkConf 和 SparkContext。然后,它定义了三个包含学生姓名和成绩的数组。在 begin 和 end 之间,代码执行了以下步骤:

使用 ++ 运算符将三个数组合并成一个数组。
使用 sc.parallelize(combinedArr) 将合并后的数组并行化,创建一个 RDD。
使用 reduceByKey(_ + _) 对 RDD 中的相同键(学生姓名)的值(成绩)进行聚合,得到每个学生的总成绩。
使用 collect().foreach(println) 方法将分布式数据集中的结果收集到驱动程序中,并遍历打印每个学生的总成绩。

第2关:读取外部数据集创建RDD


任务描述

本关任务:读取文本文件,按照文本中数据,输出老师及其出现次数。

相关知识

为了完成本关任务,你需要掌握:1.读取文件创建RDD,2.本关所需算子。

读取文件

textFile()

 
  1. val rdd = sc.textFile("/home/student.txt")//文件路径
算子

(1)map:对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD

 
  1. scala> val numbers=sc.makeRDD(List(1,2,3,4))
  2. scala> numbers.map((i: Int) => i * 2)
  3. res0: List[Int] = List(2, 4, 6, 8)

(2) reduceByKey() :对元素为RDD[K,V]对的RDDKey相同的元素的Value进行聚合。

 
  1. val list = List(("spark",2),("hive",1),("hive",2))
  2. val stuRDD = sc.makeRDD(list)
  3. stuRDD.reduceByKey(_+_).foreach(println)

输出: (spark,2) (hive,3)

(3)sortBy() :对RDD中的元素进行排序。

 
  1. val list = List(("spark",2),("hive",1),("hadoop",4))
  2. val stuRDD = sc.makeRDD(list)
  3. stuRDD.sortBy(_._2,false,3)//参数1:函数,排序规则有这个函数决定(必填) 参数2:升降序(true为升序,false为降序) 参数3:分区数量
编程要求

根据提示,在右侧编辑器begin-end处补充代码,按每位老师出现的次数降序,输出老师姓名和出现次数。

  • 输入文件样例:

bigdata,laozhang bigdata,laoduan javaee,xiaoxu

bigdata指科目,laozhang指老师名称。

测试说明

平台会对你编写的代码进行测试:

预期输出: (laozhao,15) (laoyang,9) (laoduan,5) (xiaoxu,4) (laoli,3) (laozhang,2) (laoliu,1)

import org.apache.spark.SparkContext
import org.apache.spark.SparkConfobject Teachers {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("Teachers").setMaster("local")val sc = new SparkContext(conf)val dataFile = "file:///root/step2_files"/********** begin **********/// 第一步:以外部文件方式创建RDDval rdd = sc.textFile(dataFile)// 第二步:将文件中每行的数据切分,得到自己想要的返回值val teacherRdd = rdd.map(line => (line.split(",")(1), 1))// 第三步:将相同的key进行聚合val aggregatedRdd = teacherRdd.reduceByKey(_ + _)// 第四步:按出现次数进行降序val sortedRdd = aggregatedRdd.sortBy(_._2, false)// 第五步:输出sortedRdd.collect().foreach(println)/********** end **********/sc.stop()}
}

这段代码首先创建了一个配置为本地模式的 SparkConf 和 SparkContext。然后,它定义了要读取的文本文件路径。在 begin 和 end 之间,代码执行了以下步骤:

使用 sc.textFile(dataFile) 从外部文件创建一个 RDD。
使用 map 函数将每行数据切分为老师名称和科目,并创建一个由老师名称和出现次数(初始为1)组成的元组 RDD。
使用 reduceByKey 函数对 RDD 中的相同老师名称的记录进行聚合,得到每位老师的总出现次数。
使用 sortBy 函数按照出现次数进行降序排序。
使用 collect().foreach(println) 方法将排序后的结果收集到驱动程序中,并遍历打印每位老师的姓名和出现次数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/5103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业营销战略新思考:营销5.0与开源AI智能名片S2B2C商城小程序引领私域流量经营新纪元

随着互联网的深入发展,企业营销战略已经不再是单一、静态的规划,而是一个持续进化、与市场紧密相连的动态过程。在这个过程中,营销5.0和开源AI智能名片S2B2C商城小程序的结合,为企业营销战略注入了新的活力,也为私域流…

IntelliJ IDEA - Auto filling Java call arguments 插件教程

首先,安装该插件,下载完毕后重启 IDEA 当 userService 中方法需要参数的时候,我们一般都是自己手动写这些参数,是很费劲的。因此就出现了一个插件解决这类问题 Auto filling Java call arguments 光标点击需要填写参数的位置 Alt …

深入理解Java消息中间件-性能优化和调优

性能优化和调优是构建高性能系统的重要环节,这对于Apache Kafka这样的消息中间件尤为重要。下面我们将介绍一些具体的性能优化和调优操作方式,以帮助你更好地利用Kafka来构建高性能的消息系统。 合理配置Kafka集群:合理配置Kafka集群的节点数…

ESP32-C3第二路串口(非调试)串口打通(4)

接前一篇文章:ESP32-C3第二路串口(非调试)串口打通(3) 本文内容参考: 基于 esp-idf 的 UART 应用例程解读_uart asynchronous example with separate receive an-CSDN博客 特此致谢! 上一回对…

2024.4.29力扣每日一题——将矩阵按对角线排序

2024.4.29 题目来源我的题解方法一 模拟 题目来源 力扣每日一题;题序:1329 我的题解 方法一 模拟 先以第一行的每个元素作为对角线的开始,然后再以第一列的每个元素作为对角线的开始。并在遍历过程中记录(数组或者list&#xf…

品深茶的抗癌效果怎么样?

茶叶中的一些成分,如茶多酚、儿茶素等,具有抗氧化和抗炎作用,这些作用在一定程度上可以抑制癌细胞的生长和扩散。 然而,这些成分在茶叶中的含量和生物利用率会受到多种因素的影响,如茶叶的品种、制作工艺、饮茶方式等…

rk356x 关于yocto编译linux及bitbake实用方法

Yocto 完整编译 source oe-init-build-envbitbake core-image-minimalYocto 查询包名 bitbake -s | grep XXX // 获取rockchip相关包 :~/rk3568/yocto$ bitbake -s | grep rockchip android-tools-conf-rockchip :1.0-r0 gstreamer1.0-rockchip …

我开源了一款阿里云OSS的spring-boot-starter

在上一篇文章中我们介绍了如何使用SpringBoot集成阿里云oss: 什么!没有Starter的阿里云OSS也能集成到SpringBoot? 但是这个方式还是需要自己去写配置类去配置很多的东西,那么我在想,为什么不自己写一个阿里云OSS的spri…

K8s: Prometheus 服务结构以及基础抓取数据服务部署

Prometheus 发布应用之后,就有持续运维的事情,就是平台监控Prometheus 是一个云原生的日志监控平台,是一个实时标准的一个技术它是著名的 cncf 里的一个重要的开源项目 上面整个图片是在云原生应用及K8s应用架构下的一个日志监控的一个标准的…

杰发科技AC7840——SPI通信简介(1)_跑通Demo

0. 简介 一些配置项: CPHA:相序 CPLO:极性 看着demo需要按键,于是去掉按键,去掉打印,直接输出波形看逻辑分析仪的信号。 其实现在做这些demo测试应该都有逻辑分析仪,直接看波形更直观一点。…

【C 数据结构】图的存储结构

文章目录 【 1. 图的顺序存储结构 】1.1 基本原理1.2 顺序存储结构的 C 实现 【 2. 图的链式存储结构 】2.1 图的临接表存储结构2.1.1 临接表的 基本原理2.1.2 临接表的 链表节点2.1.3 邻接表 各结构体的C实现2.1.4 临接表 计算顶点的出度和入度邻接表计算 无向图的出度和入度邻…

设计模式学习笔记 - 项目实战二:设计实现一个通用的接口幂等框架(实现)

概述 上篇文章,我们讲解了幂等框架的设计思路。在正常情况下,幂等框架的处理流程是比较简单的。调用方生成幂等号,传递给实现方,实现方记录幂等号或者用幂等号判重。但是,幂等框架要处理的异常情况很多,这…

零知识证明与同态加密:隐私计算的双剑

PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。 在数字时代,隐私保护已成为全球关注的焦点。隐私计算作为解决数据隐私问题的关键技术,其核心目标是在不泄…

一款可视化正则表达式工具

regex-vis是一款在线免费且可视化的正则表达式工具 界面图: 只能输入由26个英文字母组成的字符串 ^[A-Za-z]$ 只能输入数字 ^[0-9]*$测试错误 测试正确 快来感受一下叭 官方网址: Regex VisRegex visualizer & editor, make the regular expr…

小红书聚光里的流量洼地:N个百万级别的捡钱机会

小红书聚光里的流量洼地:N个百万级别的捡钱机会 一、前言 在最近的分享会上,笔者主要围绕小红书聚光投流的经验和对其他行业赛道的调研,与大家探讨了小红书的红利机会。在这个竞争激烈的市场中,如何抓住小红书这一流量洼地&…

ESLint 和 Prettier 各自的作用及区别

ESLint 和 Prettier 各自的作用及区别 什么是 ESLint什么是 Prettiereslint 和 prettier 有哪些区别 什么是 ESLint 官方解释:ESLint 是一个可配置的 JavaScript linter。它可以帮助你发现并修复 JavaScript 代码中的问题。问题可以是任何事情,从潜在的运…

在Xshell中利用命令行工具rz和sz实现在无Xftp情况下高效上传与下载文件

在Xshell中利用命令行工具rz和sz实现在无Xftp情况下高效上传与下载文件 引言一、安装lrzsz套件二、应用场景与使用示例1. 上传文件至Linux服务器2. 从Linux服务器下载文件至本地 三、注意事项结语 引言 在日常运维工作中,使用Xshell作为Windows平台下连接Linux服务器…

CPU vs TPU vs GPU vs DPU:一文彻底搞懂这些到底是什么

嘿,科技爱好者们!有没有想过在科技世界里到处飞舞的那些缩写是什么意思呢?🚀 CPU、TPU、GPU,现在还有 DPU —— 听起来像是字母汤,对吧?别担心!今天,我们就来深入了解这些…

回溯法——(1)装载问题(C语言讲解)

目录 一、装载问题 1.问题概括: 2.解决方案(思路): 3.图片讲解(超详细): 4.代码分析: 二、算法改进:引入上界函数 1.问题概念: 2.图片讲解&#xff1a…

程序设计:C语言 UNIX/LINUX 环境变量替换

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 很多时候程序希望对配置参数做…