Hadoop+Spark大数据技术 第七次作业

news2024/11/19 7:49:58

  • 第七次作业

    • 1. 简述Spark SQL使用的数据抽象DataFrame与Dataset的区别。

      • DataFrame: 基于 Row 对象的二维表格结构,类似于关系型数据库中的表。 行和列都有明确的 Schema(模式),可以进行类型推断。 提供了丰富的操作接口,如 select、filter、group by、agg 等。 缺点: 需要在操作时进行类型转换,例如使用 col("age").cast("int") 将类型转换为 Int。

      • Dataset: 基于特定类型的数据结构,例如 Dataset[Student],其中 Student 是一个 case class。 相比 DataFrame,Dataset 能更方便地进行类型推断,无需显式转换。 优点: 代码更简洁,类型安全,编译器可以进行类型检查。 总结: 当需要进行类型安全的操作时,Dataset 是更好的选择。当数据结构复杂,需要进行类型转换时,DataFrame 更灵活。

    • 2. 简述创建DataFrame对象的常用方法

      • 1. Parquet文件创建:使用`SparkSession`的`read.parquet()`方法从Parquet文件中创建DataFrame。

      • 2. json文件创建DataFrame对象:通过`SparkSession`的`read.json()`方法,可以从JSON文件中读取数据并创建DataFrame。

      • 3. RDD创建DataFrame对象:如果有一个RDD,使用`SparkSession`的`createDataFrame()`方法将其转换为DataFrame。

      • 4. SparkSession创建:`SparkSession`是Spark 2.0引入的入口点,可以直接用来创建DataFrame。如

      • 5. Seq创建DataFrame对象: `SparkSession`的`createDataFrame()`方法也可以接受一个包含元组的Scala `Seq`。

    • 3. 简述DataFrame对象的常用操作

      • 见实验8

    • 4. 阅读、分析下列各程序段中各语句的功能,并给出运行结果。

(1) 设grade.json文件的内容如下,给出分析
{"ID":"106","Name":"Ding","Class":"1","Scala":92,"Spark":91}
{"ID":"242","Name":"Yan","Class":"2","Scala":96,"Spark":90}
{"ID":"107","Name":"Feng","Class":"1","Scala":84,"Spark":91}
{"ID":"230","Name":"Wang","Class":"2","Scala":87,"Spark":91}
{"ID":"153","Name":"Zhang","Class":"1","Scala":62,"Spark":71}
{"ID":"242","Name":"Xu","Class":"2","Scala":88,"Spark":90}
{"ID":"235","Name":"Wu","Class":"1","Scala":83,"Spark":91}
{"ID":"224","Name":"Xia","Class":"2","Scala":89,"Spark":91}

val gradeDF=spark.read.json("grade.json")
gradeDF.count()
gradeDF.groupBy("Class").count().show()

(2) 设grade.txt文件的内容如下,给出分析
106,Ding,92,95,91
242,Yan,96,93,90
107,Feng,84,92,91
230,Wang,87,86,91
153,Zhang,85,90,92
224,Men,83,86,90
236,Wang1,87,85,89
210,Han,73,93,88
101,An,84,93,88
127,Pen,81,93,91
237,Du,83,81,85

    val lineRDD = sc.textFile("grade.txt").map{line => line.split(",")}
    val studentRDD = lineRDD.map(x => (x(0).toInt,x(1).toString,x(2).toInt,x(3).toInt,x(4).toInt))
    val studentDF = studentRDD.toDF("ID","Name","Scala","Spark","Python")
    studentDF.show()

(3) 设grade.txt文件的内容与(2)相同,给出分析
case class Student(ID:Int,Name:String,Scala:Int,Spark:Int,Python:Int)
val stuDS = spark.read.textFile("grade.txt")
val studentDataset = stuDS.map(line => {val x = line.split(",");
val ID = x(0).toInt;
val Name = x(1);
val Java = x(2).toInt;
val Scala = x(3).toInt;
val Python = x(4).toInt;
Student(ID,Name,Java,Scala,Python)})
studentDataset.sort(studentDataset("ID").desc).show()

(1)这段代码分析及运行结果:
   - `spark.read.json("grade.json")`:从给定的grade.json文件中读取数据,创建一个DataFrame `gradeDF`。
   - `gradeDF.count()`:返回DataFrame的行数,这里有8行数据。
   - `gradeDF.groupBy("Class").count().show()`:按照"Class"字段对数据进行分组,并计算每组的行数,然后显示结果。
     ```
     +-----+-----+
     |Class|count|
     +-----+-----+
     |   1 |   4 |
     |   2 |   4 |
     +-----+-----+
     ```
   - 输出显示有两个班级,每个班级各有4个学生。

(2)这段代码分析及运行结果:
   - `sc.textFile("grade.txt").map{line => line.split(",")}`:读取grade.txt文件,将每一行分割成数组,并创建一个新的RDD `lineRDD`。
   - `lineRDD.map(x => (x(0).toInt,x(1).toString,x(2).toInt,x(3).toInt,x(4).toInt))`:将RDD `lineRDD`中的每个元素(数组)转换为元组,然后创建一个新的RDD `studentRDD`。
   - `studentRDD.toDF("ID","Name","Scala","Spark","Python")`:将`studentRDD`转换为DataFrame `studentDF`,并指定列名。
   - `studentDF.show()`:显示DataFrame `studentDF`的内容。
     ```
     +---+----+-----+-----+-----+
     | ID|Name|Scala|Spark|Python|
     +---+----+-----+-----+-----+
     |106| Ding|   92|   95|   91|
     |242| Yan |   96|   93|   90|
     |107| Feng|   84|   92|   91|
     |230| Wang|   87|   86|   91|
     |153|Zhang|   85|   90|   92|
     |224| Men |   83|   86|   90|
     |236|Wang1|   87|   85|   89|
     |210| Han |   73|   93|   88|
     |101|  An |   84|   93|   88|
     |127| Pen |   81|   93|   91|
     |237|  Du |   83|   81|   85|
     +---+----+-----+-----+-----+
     ```
   - 输出展示了10个学生的信息,包括ID、Name、Scala、Spark和Python的分数。

(3)这段代码分析及运行结果:
   - `case class Student(ID:Int,Name:String,Scala:Int,Spark:Int,Python:Int)`:定义了一个名为`Student`的case class,包含5个字段。
   - `spark.read.textFile("grade.txt")`:读取grade.txt文件,创建RDD `stuDS`。
   - `stuDS.map...`:将RDD `stuDS`中的每一行数据转换为`Student`对象,然后创建一个新的Dataset `studentDataset`。
   - `studentDataset.sort(studentDataset("ID").desc).show()`:按ID字段降序排序`studentDataset`,然后显示结果。
     ```
     +---+----+-----+-----+-----+
     | ID|Name|Java |Scala|Python|
     +---+----+-----+-----+-----+
     |237|  Du|   83|   81|   85|
     |236|Wang1|   87|   85|   89|
     |230| Wang|   87|   86|   91|
     |224| Men |   83|   86|   90|
     |210| Han |   73|   93|   88|
     |127| Pen |   81|   93|   91|
     |107| Feng|   84|   92|   91|
     |106| Ding|   92|   95|   91

 

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

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

相关文章

vue中大屏可视化适配所有屏幕大小

1. 外部盒子 .screenBox {width: 100vw;height: 100vh;background: url("/assets/images/bg.png") no-repeat;background-size: cover; }2.比例盒子 外层盒子css定义 .boxScale {width: 1920px;height: 1080px;background-color: orange;transform-origin: left top;…

【工具】创客贴会员|创客贴截止2024年6月所有AI功能效果实测(热门推荐和图片编辑部分)

上一篇:【工具】创客贴会员|万字测评!前沿设计网站创客贴的 AI 文生图效果测评 上一篇写的时候只测了文生图,因为百度那边活动没和创客贴接洽好,他们不清楚创客贴的AI和其他会员功能分开了,导致只有10次体…

LabVIEW老程序功能升级:重写还是改进?

概述:面对LabVIEW老程序的功能升级,开发者常常面临重写与改进之间的选择。本文从多个角度分析两种方法的利弊,并提供评估方法和解决思路。 重写(重新开发)的优势和劣势: 优势: 代码清晰度高&a…

【机器学习300问】106、Inception网络结构如何设计的?这么设计的目的是什么?

谷歌的Inception网络,也被称为GoogLeNet,是Google在2014年推出的一种深度卷积神经网络(CNN)模型,在这之前的AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果,但…

Python—面向对象小解(3)

一、多态 多态指的是一类事物的多中形态 相同的方法,产生不同的执行结果 运算符 * 的多态 int int 加法计算 str str 字符串拼接 list list 列表的数据合并 在python中可以使用类实现一个多态效果 在python中使用重写的方式实现多态 (1)定…

字符串 | 字符串匹配之 KMP 算法以及 C++ 代码实现

目录 1 为什么使用 KMP?2 什么是 next 数组?2.1 什么是字符串的前后缀?2.2 如何计算 next 数组? 3 KMP 部分的算法4 完整代码 😈前言:这篇文章比较长,但我感觉自己是讲明白了的 1 为什么…

Vue之组件基础(插槽)

在HTML中,开发者可以在双标签内添加一些信息。而在Vue中,组件以标签的形式引用,那么如何在组件的标签内添加一些信息并将信息渲染到页面中呢?其实,Vue 提供了插槽,专门用来实现这样的效果。 一.什么是插槽 Vue为组件…

怎么使用Python代码在图片里面加文字

在Python中,给图片添加文字可以使用Pillow库(PIL的一个分支),它是一个强大的图像处理库。如果你还没有安装Pillow,可以通过pip安装: pip install Pillow下面使用一个简单的示例,演示如何使用Pi…

系统架构设计师【第9章】: 软件可靠性基础知识 (核心总结)

文章目录 9.1 软件可靠性基本概念9.1.1 软件可靠性定义9.1.2 软件可靠性的定量描述9.1.3 可靠性目标9.1.4 可靠性测试的意义9.1.5 广义的可靠性测试与狭义的可靠性测试 9.2 软件可靠性建模9.2.1 影响软件可靠性的因素9.2.2 软件可靠性的建模方法9.2.3 软件的可靠性模…

CISCN 2023 初赛 被加密的生产流量

题目附件给了 modbus.pcap 存在多个协议 但是这道题多半是 考 modbus 会发现 每次的 Query 末尾的两个字符 存在规律 猜测是base家族 可以尝试提取流量中的数据 其中Word Count字段中的22871 是10进制转16进制在转ascii字符串 先提取 过滤器判断字段 tshark -r modbus.pcap …

java线程状态介绍

1.新建(New): 线程对象已创建,但还没有调用 start() 方法。 2.可运行(Runnable): 线程已启动,处于就绪状态,等待 JVM 的线程调度器分配CPU时间。 3.阻塞(Blocked): 线程…

自动化桌面整理新时代:Llama 3驱动的智能文件管理系统

在信息爆炸的时代,个人和企业用户的电脑桌面常常被海量文件占据,导致查找特定文件如同大海捞针。为了解决这一痛点,Llama 3应运而生——一个集成了先进多模态AI技术的智能文件管家,旨在将杂乱无章的文件世界变得井然有序。本文将深入探讨Llama 3如何利用其创新功能,不仅自…

上传RKP 证书签名请求息上传到 Google 的后端服务器

上传证书签名请求 1.准备环境:OK pip3 install google-auth2.13.0 requests2.28下载 device_info_uploader.py 。 没找到先跳过 选项 1:通过 GCP 帐户使用 device_info_uploader.py 运行脚本。 ./device_info_uploader.py --credentials /secure/s…

简要分析学习spring内存马,劫持马

简要分析学习spring内存马,劫持马 本文主要是通过SpringMemShell这个工程,来对spring内存马进行演示,利用。 写在前面: 参考的是大佬给的流程以及思路,其中的解释与分析非常详细 ----->>大佬的链接 这里的内存马文件取自gi…

python采集汽车价格数据

python采集汽车价格数据 一、项目简介二、完整代码一、项目简介 本次数据采集的目标是车主之家汽车价格数据,采集的流程包括寻找数据接口、发送请求获取响应、解析数据和持久化存储,先来看一下数据情况,完整代码附后: 二、完整代码 #输入请求页面url #返回html文档 imp…

Scikit-Learn 基础教程

目录 🐋Scikit-Learn 基础教程 🐋Scikit-Learn 简介 🐋 数据预处理 🦈数据集导入 🦈数据清洗 🦈特征选择 🦈特征标准化 🐋 模型选择 🦈分类模型 🦈回…

Resilience4j结合微服务出现的异常

Resilience4j结合微服务出现的异常 1、retry未生效 由于支持aop&#xff0c;所以要引入aop的依赖。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>2、circ…

解决:【无法安装“vue.volar“扩展,因为它与当前 VIsual Studio Code 版本不兼容(版本 1.80.0)】

目录 问题复现问题分析解决步骤1、进入VSCode插件市场&#xff0c;搜索Vue.volar2、点击搜索结果&#xff0c;进入详情页面3、下载.vsix文件完成后&#xff0c;用解压软件打开 4、复制package.json文件&#xff0c;修改vscode版本5、保存package.json文件&#xff0c;并更新.v…

2024 HN CTF WebMisc 部分 wp

Web ez_tp 判断是thinkphp 3.2 参考官方手册:https://www.kancloud.cn/manual/thinkphp/1697 判断路由模式 URL_CASE_INSENSITIVE > true, // 默认false 表示URL区分大小写 true则表示不区分大小写URL_MODEL > 1, // URL访问模式,可选参数0、1、…

cURL error 60: SSL certificate problem: unable to get local issuer certifica

本地小程序把接口换到本地的服务器接口&#xff0c;然后就报错了&#xff1a; cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) 经查询查到&#xff1a;此问题的出现是由于没有配…