sparkRDD教程之必会的题目

1.前期准备

(1)看看上一期的博客,最好跟着上一期的博客把sparkRDD的基本命令给熟练掌握后,再来做这篇文章的任务。

上一期的博客:sparkRDD教程之基本命令-CSDN博客

(2)新建文件task6.scala

package com.itheima

import org.apache.spark.sql.SparkSession

object task6 {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder
      .appName("task6")
      .master("local")
      .getOrCreate()
    val sc = spark.sparkContext
    //代码在这里写


    spark.stop()
  }

}

(3)在开始写代码之前先熟悉一下这2个文件

result_bigdata.txt(学号,科目为大数据,成绩),注意了这里的分隔符为"\t"
1001	大数据基础	90
1002	大数据基础	94
1003	大数据基础	100
1004	大数据基础	99
1005	大数据基础	90
1006	大数据基础	94
1007	大数据基础	100
1008	大数据基础	93
1009	大数据基础	89
1010	大数据基础	78
1011	大数据基础	91
1012	大数据基础	84
result_math.txt(学号,科目为数学,成绩),注意了这里的分隔符为"\t"
1001	应用数学	96
1002	应用数学	94
1003	应用数学	100
1004	应用数学	100
1005	应用数学	94
1006	应用数学	80
1007	应用数学	90
1008	应用数学	94
1009	应用数学	84
1010	应用数学	86
1011	应用数学	79
1012	应用数学	91

2.任务1:(十分简单)

(1)取出大数据成绩排名前5的学生成绩信息并且在控制台打印出来,

代码1

    var math_path = "src\\main\\resources\\result_math.txt"
    var math_data = sc.textFile(math_path)
    var math1 = math_data.map(x => x.split("\t")).map(x => (x(0), x(1), x(2).toInt))
    println(math1.collect().mkString("\n"))

截图1

代码2(最终代码)

    var math_path = "src\\main\\resources\\result_math.txt"
    var math_data = sc.textFile(math_path)
    var math1 = math_data.map(x => x.split("\t")).map(x => (x(0), x(1), x(2).toInt))
    var rdd1 = math1.sortBy(x => x._3, false)
    println(rdd1.take(5).mkString("\n"))

截图2

(2)取出数学成绩排名前5的学生成绩信息并且在控制台打印出来

代码1

    var bigdata_path = "src\\main\\resources\\result_bigdata.txt"
    var bigdata_data = sc.textFile(bigdata_path)
    var bigdata1 = bigdata_data.map(x => x.split("\t")).map(x => (x(0), x(1), x(2).toInt))
    println(bigdata1.collect().mkString("\n"))

截图1

代码2(最终代码)

    var bigdata_path = "src\\main\\resources\\result_bigdata.txt"
    var bigdata_data = sc.textFile(bigdata_path)
    var bigdata1 = bigdata_data.map(x => x.split("\t")).map(x => (x(0), x(1), x(2).toInt))
    var rdd2=bigdata1.sortBy(x=>x._3,false)
    println(rdd2.take(5).mkString("\n"))

截图2

3.任务2:获取单科成绩为100的学生id

代码1

    var math_path = "src\\main\\resources\\result_math.txt"
    var math_data = sc.textFile(math_path)
    var math1 = math_data.map(x => x.split("\t")).map(x => (x(0), x(1), x(2).toInt))
//    var rdd1 = math1.sortBy(x => x._3, false)
//    println(rdd1.take(5).mkString("\n"))

    var bigdata_path = "src\\main\\resources\\result_bigdata.txt"
    var bigdata_data = sc.textFile(bigdata_path)
    var bigdata1 = bigdata_data.map(x => x.split("\t")).map(x => (x(0), x(1), x(2).toInt))
//    var rdd2=bigdata1.sortBy(x=>x._3,false)
//    println(rdd2.take(5).mkString("\n"))

    var total1 = math1.union(bigdata1)
    println(total1.collect().mkString("\n"))

截图1

代码2(最终代码)

    var math_path = "src\\main\\resources\\result_math.txt"
    var math_data = sc.textFile(math_path)
    var math1 = math_data.map(x => x.split("\t")).map(x => (x(0), x(1), x(2).toInt))
//    var rdd1 = math1.sortBy(x => x._3, false)
//    println(rdd1.take(5).mkString("\n"))

    var bigdata_path = "src\\main\\resources\\result_bigdata.txt"
    var bigdata_data = sc.textFile(bigdata_path)
    var bigdata1 = bigdata_data.map(x => x.split("\t")).map(x => (x(0), x(1), x(2).toInt))
//    var rdd2=bigdata1.sortBy(x=>x._3,false)
//    println(rdd2.take(5).mkString("\n"))

    var total1 = math1.union(bigdata1)
    val scoreIs100_id=total1.filter(x=>x._3==100).map(x=>x._1).distinct()
//    println(total1.collect().mkString("\n"))
    println(scoreIs100_id.collect().mkString("\n"))

截图2

4.任务3:

(1)求每个学生的总成绩(即大数据成绩+数学成绩)

代码1

    var math_path = "src\\main\\resources\\result_math.txt"
    var math_data = sc.textFile(math_path)
    var math1 = math_data.map(x => x.split("\t")).map(x => (x(0), x(1), x(2).toInt))
//    var rdd1 = math1.sortBy(x => x._3, false)
//    println(rdd1.take(5).mkString("\n"))

    var bigdata_path = "src\\main\\resources\\result_bigdata.txt"
    var bigdata_data = sc.textFile(bigdata_path)
    var bigdata1 = bigdata_data.map(x => x.split("\t")).map(x => (x(0), x(1), x(2).toInt))
//    var rdd2=bigdata1.sortBy(x=>x._3,false)
//    println(rdd2.take(5).mkString("\n"))

    var math2=math1.map(x=>(x._1,x._3))
    var bigdata2=bigdata1.map(x=>(x._1,x._3))
    var total2=math2.union(bigdata2)
    println(total2.collect().mkString("\n"))

截图1

代码2

    var math_path = "src\\main\\resources\\result_math.txt"
    var math_data = sc.textFile(math_path)
    var math1 = math_data.map(x => x.split("\t")).map(x => (x(0), x(1), x(2).toInt))
//    var rdd1 = math1.sortBy(x => x._3, false)
//    println(rdd1.take(5).mkString("\n"))

    var bigdata_path = "src\\main\\resources\\result_bigdata.txt"
    var bigdata_data = sc.textFile(bigdata_path)
    var bigdata1 = bigdata_data.map(x => x.split("\t")).map(x => (x(0), x(1), x(2).toInt))
//    var rdd2=bigdata1.sortBy(x=>x._3,false)
//    println(rdd2.take(5).mkString("\n"))
    

    var math2 = math1.map(x => (x._1, x._3))
    var bigdata2 = bigdata1.map(x => (x._1, x._3))
    var total2=math2.union(bigdata2)
    var total_score=total2
      .reduceByKey((y1,y2)=>(y1+y2))
    println(total_score.collect().mkString("\n"))

截图2

代码3(最终代码)

    var math_path = "src\\main\\resources\\result_math.txt"
    var math_data = sc.textFile(math_path)
    var math1 = math_data.map(x => x.split("\t")).map(x => (x(0), x(1), x(2).toInt))
//    var rdd1 = math1.sortBy(x => x._3, false)
//    println(rdd1.take(5).mkString("\n"))

    var bigdata_path = "src\\main\\resources\\result_bigdata.txt"
    var bigdata_data = sc.textFile(bigdata_path)
    var bigdata1 = bigdata_data.map(x => x.split("\t")).map(x => (x(0), x(1), x(2).toInt))
//    var rdd2=bigdata1.sortBy(x=>x._3,false)
//    println(rdd2.take(5).mkString("\n"))
    

    var math2 = math1.map(x => (x._1, x._3))
    var bigdata2 = bigdata1.map(x => (x._1, x._3))
    var total2=math2.union(bigdata2)
    var total_score=total2
      .reduceByKey((y1,y2)=>(y1+y2))
      .map(x=>(x._1,"总成绩",x._2))
      .sortBy(x=>x._1)
    println(total_score.collect().mkString("\n"))

截图3

(2)求每个学生的平均成绩(即总成绩/科目总数)

代码1

    var math_path = "src\\main\\resources\\result_math.txt"
    var math_data = sc.textFile(math_path)
    var math1 = math_data.map(x => x.split("\t")).map(x => (x(0), x(1), x(2).toInt))
//    var rdd1 = math1.sortBy(x => x._3, false)
//    println(rdd1.take(5).mkString("\n"))

    var bigdata_path = "src\\main\\resources\\result_bigdata.txt"
    var bigdata_data = sc.textFile(bigdata_path)
    var bigdata1 = bigdata_data.map(x => x.split("\t")).map(x => (x(0), x(1), x(2).toInt))
//    var rdd2=bigdata1.sortBy(x=>x._3,false)
//    println(rdd2.take(5).mkString("\n"))


    var total0 = math1.union(bigdata1)
    //求科目总数
    var subjectNum=total0.map(x=>x._2).distinct().count().toInt
    var aver1_score=total0.map(x=>(x._1,x._3))
      .reduceByKey((y1,y2)=>(y1+y2))
      .map(x=>(x._1,"平均成绩",x._2/subjectNum))
      .sortBy(x=>x._1)
    println(aver1_score.collect().mkString("\n"))

截图1

5.任务4:

(1)求全班大数据单科平均分

代码1

    //求数学单科平均分
    var math_stuCount = math1.count().toInt
    var math_oneSubjectAver = math1.map(x => (x._2, x._3))
      .reduceByKey((y1, y2) => (y1 + y2))
      .map(x => ("数学单科平均分", x._2 / math_stuCount))
    println(math_oneSubjectAver.collect().mkString(", "))

截图1

(2)求全班数学单科平均分

代码1

    //求大数据单科平均分
    var bigdata_stuCount = bigdata1.count().toInt
    var bigdata_oneSubjectAver = bigdata1.map(x => (x._2, x._3))
      .reduceByKey((y1, y2) => (y1 + y2))
      .map(x => ("大数据单科平均分", x._2 / bigdata_stuCount))
    println(bigdata_oneSubjectAver.collect().mkString(","))

截图1

6.其他


(1)sparkRDD是什么和sparkSQL是什么关系

在Apache Spark中,`RDD`(Resilient Distributed Dataset)和`SparkSQL`是两个不同的概念,它们分别代表了Spark中的核心数据结构和处理框架,但它们之间是有关系的。

### 1. **RDD(Resilient Distributed Dataset)**
   - **定义**:RDD是Spark的核心抽象,是一个不可变的分布式数据集,支持并行处理。它是Spark计算模型的基础,所有的数据都可以通过RDD进行处理。
   - **特性**:
     - **弹性(Resilient)**:即使某些数据分区丢失,RDD也能够自动从其他地方恢复数据。
     - **分布式(Distributed)**:RDD的元素存储在集群中的多个节点上,因此可以进行并行处理。
     - **不可变(Immutable)**:RDD一旦创建,就无法更改。如果需要修改RDD的内容,必须创建一个新的RDD。
   - **使用场景**:RDD通常用于处理低级的并行计算任务,它提供了丰富的操作,如`map`、`filter`、`reduce`等。

### 2. **SparkSQL**
   - **定义**:SparkSQL是一个用于结构化数据查询的组件,它允许使用SQL查询、DataFrame和Dataset API对数据进行处理。SparkSQL支持从多种数据源加载数据,如Hive、Parquet、JSON等。
   - **特性**:
     - 支持通过SQL语法直接查询数据,使用SQL与RDD不同的高层次抽象(如DataFrame和Dataset)。
     - 提供了对结构化数据的优化查询执行引擎,可以有效地优化查询计划。
     - 可以通过SQL执行复杂的操作,如联接、分组、排序等。
   - **使用场景**:SparkSQL适用于需要使用SQL查询的结构化数据处理场景,并且能比直接使用RDD更方便和高效地执行复杂查询。

### **RDD与SparkSQL的关系**
   - **底层实现**:SparkSQL的核心实现是建立在RDD之上的。虽然用户可以使用SQL或者DataFrame API进行高层次操作,但底层的计算仍然通过RDD来实现。
   - **转换关系**:
     - `DataFrame`和`Dataset`(SparkSQL的两种高层次API)都是基于RDD构建的。你可以通过将RDD转换为DataFrame或Dataset来利用SparkSQL提供的优化和功能。
     - 例如,`DataFrame`是一个分布式的数据集,类似于数据库中的表格,它是在RDD的基础上进一步封装的,提供了更高效的查询和处理功能。
   - **性能优化**:SparkSQL通过Catalyst查询优化器对SQL查询进行优化,生成更高效的执行计划。这个优化过程是通过RDD操作的进一步封装和调整来实现的,确保SparkSQL在处理数据时尽可能高效。

### 总结
- **RDD** 是Spark的基础抽象,代表分布式、不可变的数据集。
- **SparkSQL** 是一个高层次的接口,用于进行结构化数据的查询和分析,支持SQL语法和更高级的DataFrame、Dataset API。它建立在RDD的基础上,但提供了更优化和简便的查询方式。


(2)spark-shell是什么

`spark-shell` 是 Apache Spark 提供的一个交互式命令行工具,用于与 Spark 集群进行交互并执行 Spark 作业。它提供了一个基于 Scala 的 REPL(Read-Eval-Print Loop)环境,允许用户以编程方式直接在 Spark 集群上运行代码、执行数据分析操作和调试任务。

具体来说,`spark-shell` 的功能包括:

1. **交互式编程**:通过 Scala 命令行,用户可以直接在 Spark 集群上运行代码,而无需编写完整的 Spark 应用程序。
   
2. **集群管理**:它自动设置 Spark 集群的连接和资源管理,帮助用户方便地运行分布式计算任务。

3. **调试和测试**:适用于开发和调试阶段,可以快速验证代码段或算法的执行结果。

4. **支持 RDD 和 DataFrame 操作**:用户可以利用 `spark-shell` 进行 Spark 核心功能的操作,如 RDD 和 DataFrame 的创建与转换。

### 使用方式
在安装了 Spark 的机器上,可以通过命令行启动 `spark-shell`:

```bash
./bin/spark-shell
```

这将启动一个 Scala REPL 环境,允许用户通过 Scala 编写并执行 Spark 代码。

### 示例
启动 `spark-shell` 后,可以执行如下操作:

```scala
val data = sc.parallelize(1 to 100)
val result = data.filter(_ % 2 == 0).collect()
println(result.mkString(", "))
```

以上代码会在 Spark 集群上并行地处理数据,筛选出偶数并返回结果。

总的来说,`spark-shell` 是一个非常有用的工具,适合用于快速原型开发、调试以及测试 Spark 程序。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

stack和queue专题

文章目录 stack最小栈题目解析代码 栈的压入弹出序列题目解析代码 queue二叉树的层序遍历题目解析代码 stack stack和queue都是空间适配器 最小栈 最小栈的题目链接 题目解析 minst是空就进栈&#xff0c;或者是val < minst.top()就进栈 代码 class MinStack { public:M…

欧拉路径算法

欧拉图&#xff1a; 对于应该连通图G&#xff0c;有&#xff1a; 1欧拉路径&#xff1a;一条路径&#xff0c;它能够不重复地遍历完所有的边&#xff0c;这个性质很像不重复地一笔画完所有边&#xff0c;所以有些涉及到欧拉路径的问题叫做一笔画问题。 2欧拉回路&#xff1a…

【C#设计模式(23)——模板方法模式(Template Method Pattern)】

前言 在抽象类中封装算法的结构&#xff0c;具体的实现步骤由子类定义&#xff0c;从而达到不改变算法结构的&#xff0c;允许子类重定义方法内容。代码 public abstract class Teamplate {public void TeamplateMethod(){Step1();Step2();Step3();}protected abstract void …

MyBatis——XML映射文件

在MyBatis中&#xff0c;既可以通过注解的方式配置SQL语句&#xff0c;也可以通过XML映射文件的方式配置SQL语句。对于简单的SQL语句建议直接通过注解的方式配置SQL语句&#xff1a; Delete("delete from user where id#{id}") Integer deleteById(Integer id);但是…

Mysql--运维篇--安全性(数据库访问控制,最小权限原则,表空间加密,TLS加密,证书签发,SQL注入及防范等)

一、数据库访问控制 MySQL的访问控制是确保数据库安全的关键机制之一。通过合理的用户权限管理和访问控制策略&#xff0c;可以防止未经授权的用户访问、修改或删除敏感数据。 1、MySQL访问控制的工作原理 MySQL使用基于用户的访问控制模型&#xff0c;每个用户都有特定的权…

抽奖滚动功能

代码 <template><div class"box"><video class"video" src"../../assets/video/底层.mp4" loop autoplay muted></video><img class"choujiang" src"../../assets/image/抽奖1.png" alt"&…

【Python】Python之locust压测教程+从0到1demo:基础轻量级压测实战(1)

文章目录 一、什么是Locust二、Locust 架构组成三、实战 Demo准备一个可调用的接口编写一个接口测试用例编写一个性能测试用例执行性能测试用例代码1、通过 Web UI 执行&#xff08;GUI模式&#xff09;2、通过命令行执行&#xff08;非GUI模式&#xff09; 小知识&#xff1a;…

Microsoft

Microsoft Word目录1.目录编号与文字的间距设置2. 目录编号缩进设置 Excel函数MID&#xff08;提取字符&#xff09;CONCAT&#xff08;组合字符串&#xff09;EXACT&#xff08;比较字符串&#xff09; PowerPointwindows 11 恢复右键传统菜单 Word 目录 1.目录编号与文字的…

用 Python 处理 CSV 和 Excel 文件

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

JS后盾人--再一次的走进JS?

程序跑起来与避免延迟 如果你讲JS&#xff0c;你就不可能只讲JS 后盾人说开发就要用VScode&#xff08;确实&#xff0c;Windows和Linux都可以跑&#xff09; 然后就是第一天开发的时候装的那些插件 前端访问流程基本分析 托管到服务器上的东西&#xff0c;谁访问下载到谁的…

Android 调用系统服务接口获取屏幕投影(需要android.uid.system)

媒体投影 借助 Android 5&#xff08;API 级别 21&#xff09;中引入的 android.media.projection API&#xff0c;您可以将设备屏幕中的内容截取为可播放、录制或投屏到其他设备&#xff08;如电视&#xff09;的媒体流。 Android 14&#xff08;API 级别 34&#xff09;引入…

PT8M2102 触控型 8Bit MCU

1. 产品概述 PT8M2102 是一款基于 RISC 内核的 8 位 MTP 单片机&#xff0c;内部集成了电容式触摸感应模块、 TIMER 、 PWM、 LVR 、 LVD 、 WDT 等外设&#xff0c;其主要用作触摸按键开关&#xff0c;广泛适用于触控调光、电子玩具、消 费电子、家用电器等领域&am…

LangGraph 教程:初学者综合指南(2)

工具集成 将工具集成到 LangGraph 聊天机器人中可以显着增强其功能&#xff0c;使其能够按照您喜欢的方式访问和处理信息。 让我们修改上一节中创建的基本聊天机器人&#xff0c;以包含一个可以在网络上搜索信息的工具。我们将使用langchain_中community.tools TavilySearchR…

项目练习:若依管理系统字典功能-Vue前端部分

文章目录 一、情景说明二、若依Vue相关代码及配置1、utils代码2、components组件3、api接口代码4、main.js配置 三、使用方法1、html部分2、js部分 一、情景说明 我们在做web系统的时候&#xff0c;肯定会遇到一些常量选择场景。 比如&#xff0c;性别&#xff1a;男女。 状态…

oracle闪回表

文章目录 闪回表案例1&#xff1a;&#xff08;未清理回收站时的闪回表--成功&#xff09;案例2&#xff08;清理回收站时的闪回表--失败&#xff09;案例3&#xff1a;彻底删除表&#xff08;不经过回收站--失败&#xff09;案例4&#xff1a;闪回表之后重新命名新表总结1、删…

TensorFlow Quantum快速编程(基本篇)

一、TensorFlow Quantum 概述 1.1 简介 TensorFlow Quantum(TFQ)是由 Google 开发的一款具有开创性意义的开源库,它宛如一座桥梁,巧妙地将量子计算与 TensorFlow 强大的机器学习功能紧密融合。在当今科技飞速发展的时代,传统机器学习虽已取得诸多瞩目成就,然而面对日益…

K8s数据存储之详解(Detailed Explanation of K8s Data Storage)

K8s数据存储相关概念详解&#xff08;临时存储&#xff0c;节点存储&#xff0c;网络存储&#xff0c;PV/PVC&#xff09; 本篇文章分享一下存储卷和数据持久化的相关概念&#xff1a; 存储卷概述 临时存储卷&#xff08;Ephemeral Volumes&#xff09; 节点存储卷&#xff…

java求职学习day12

1 泛型机制&#xff08;熟悉&#xff09; 1.1 基本概念 &#xff08;1&#xff09;通常情况下集合中可以存放不同类型的元素&#xff0c;是因为将所有对象都看作Object类型放入&#xff0c;因此从集合中取出元素时&#xff0c;也是Object类型&#xff0c;为了表达该元素真实的…

相加交互效应函数发布—适用于逻辑回归、cox回归、glmm模型、gee模型

在统计分析中交互作用是指某因素的作用随其他因素水平变化而变化&#xff0c;两因素共同作用不等于两因素单独作用之和(相加交互作用)或之积(相乘交互作用)。相互作用的评估是尺度相关的&#xff1a;乘法或加法。乘法尺度上的相互作用意味着两次暴露的综合效应大于&#xff08;…

Spring Boot 2 学习全攻略

Spring Boot 2 学习资料 Spring Boot 2 学习资料 Spring Boot 2 学习资料 在当今快速发展的 Java 后端开发领域&#xff0c;Spring Boot 2 已然成为一股不可忽视的强大力量。它简化了 Spring 应用的初始搭建以及开发过程&#xff0c;让开发者能够更加专注于业务逻辑的实现&am…