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

  • 第七次作业

    • 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,85val 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.mzph.cn/pingmian/20094.shtml

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

相关文章

docker私有镜像仓库的搭建及认证

简介: docker私有镜像仓库的搭建及认证 前言 在生产上使用的 Docker 镜像可能包含我们的代码、配置信息等,不想被外部人员获取,只允许内 网的开发人员下载。 Docker 官方提供了一个叫做 registry 的镜像用于搭建本地私有仓库使用。在内部网…

苍穹外卖数据可视化

文章目录 1、用户统计2、订单统计3、销量排名Top10 1、用户统计 所谓用户统计,实际上统计的是用户的数量。通过折线图来展示,上面这根蓝色线代表的是用户总量,下边这根绿色线代表的是新增用户数量,是具体到每一天。所以说用户统计…

CS4344国产替代音频DAC数模转换芯片DP7344采样率192kHz

目录 DAC应用简介DP7344简介结构框图DP7344主要特性微信号:dnsj5343参考原理图 应用领域 DAC应用简介 DAC(中文:数字模拟转换器)是一种将数字信号转换为模拟信号(以电流、电压或电荷的形式)的设备。电脑对…

BSD盲区检测系统性能要求及试验方法

相关术语 盲区检测(bsd,blind spot detection)试验车辆(subject vehicle)目标车辆(target vehicle)横向距离(lateral distance):试验车车身最外缘(不包含外后视镜)与目标车辆车身最外缘(不包含外后视镜)之间的横向距离。 纵向距离(longitudinal distance):试验…

SpringBoot的第二大核心AOP系统梳理

目录 1 事务管理 1.1 事务 1.2 Transactional注解 1.2.1 rollbackFor 1.2.2 propagation 2 AOP 基础 2.1 AOP入门 2.2 AOP核心概念 3. AOP进阶 3.1 通知类型 3.2 通知顺序 3.3 切入点表达式 execution切入点表达式 annotion注解 3.4 连接点 1 事务管理 1.1 事务…

云计算与 openstack

文章目录 一、 虚拟化二、云计算2.1 IT系统架构的发展2.2 云计算2.3 云计算的服务类型 三、Openstack3.1 OpenStack核心组件 一、 虚拟化 虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之…

组装电脑(使用老机箱)

昨天同事拿来一台联想 ThinkCentre M6210t的台式机,说计算机实在是太慢了,在只保留主机箱想升级一下。   她拿来了配件,有电源、主板、CPU、CPU风扇、内存条、机箱风扇、硬盘:   主板:华硕 Prime H610M-K D4&#…

element-ui表格全选

项目场景&#xff1a; 根据项目需求&#xff0c;要求在表格外加【全选】复选框&#xff0c;切换分页也需将每一行都勾选上 实现方式&#xff1a; 借用element-ui文档的这几个方法和属性 <el-checkboxv-model"checkAll"change"handleCheckAllChange"&g…

【计算机网络】——物理层(图文并茂)

物理层 一.物理层概述1.物理层要实现的功能2.物理层接口特征1.机械特性2.电气特性3.功能特性4.过程特性 二.物理层下面的传输媒体1.传输媒体的分类2.导向型传输媒体1.同轴电缆2.双绞线3.光纤 3.非导向型传输媒体1.无线电波2.微波3.红外线4.激光5.可见光 三.传输方式1.串行传输与…

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

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

研发效能DevOps: Ubuntu 部署 JFrog 制品库

目录 一、实验 1.环境 2.Ubuntu 部署 JFrog 制品库 3.Ubuntu 部署 postgresql数据库 4.Ubuntu 部署 Xray 5. 使用JFrog 增删项目 二、问题 1.Ubuntu 如何通过apt方式部署 JFrog 制品库 2.Ubuntu 如何通过docker方式部署 JFrog 制品库 3.安装jdk报错 4.安装JFrog Ar…

javascript DOM 属性详解:读取、修改、移除

No.内容链接1Openlayers 【入门教程】 - 【源代码示例300】 2Leaflet 【入门教程】 - 【源代码图文示例 150】 3Cesium 【入门教程】 - 【源代码图文示例200】 4MapboxGL【入门教程】 - 【源代码图文示例150】 5前端就业宝典 【面试题详细答案 1000】 文章目录 一、读取…

动态路由协议实验——RIP

动态路由协议实验——RIP 什么是RIP ​ RIP(Routing Information Protocol,路由信息协议&#xff09;是一种内部网关协议&#xff08;IGP&#xff09;&#xff0c;是一种动态路由选择协议&#xff0c;用于自治系统&#xff08;AS&#xff09;内的路由信息的传递。RIP协议基于…

实时数据传输:Django 与 MQTT 的完美结合

文章目录 准备工作创建 Django 项目与应用设置 MQTT 服务器编写 Django 视图编写前端模板发布 MQTT 消息运行 Django 项目 在当今互联网应用中&#xff0c;实时数据传输已经成为许多项目的核心需求。无论是社交媒体平台、在线游戏、金融交易还是物联网设备&#xff0c;都需要及…

Python—面向对象小解(3)

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

飞腾D2000+FPGA云终端,实现从硬件、操作系统到应用的完全国产、自主、可控

飞腾云终端基于国产化飞腾高性能8核D2000处理器平台的国产自主可控解决方案&#xff0c;搭载昆仑国产化固件,支持UOS、银河麒麟等国产操作系统&#xff0c;满足国产化信息安全运算的需求&#xff0c;实现从硬件、操作系统到应用的完全国产、自主、可控&#xff0c;是国产信息安…

WireShark抓包软件的使用 上海商学院 计算机网络 实验作业3

实验目的 &#xff08;1&#xff09;熟悉wireShark软件操作界面和操作步骤&#xff1b; &#xff08;2&#xff09;学会捕获过滤器的设置方法&#xff1b; &#xff08;3&#xff09;学会显示过滤器的设置方法&#xff1b; &#xff08;4&#xff09;学会使用捕获报文的统计…

20231911 2023-2024-2 《网络攻防实践》实践十一报告

实践内容 &#xff08;1&#xff09;web浏览器渗透攻击 任务&#xff1a;使用攻击机和Windows靶机进行浏览器渗透攻击实验&#xff0c;体验网页木马构造及实施浏览器攻击的实际过程。 实验步骤&#xff1a; ①选择使用Metasploit中的MS06-014渗透攻击模块②选择PAYLOAD为任意…

Linux基本命令的使用(mkdir)

一、Linux必备命令之mkdir • mkdir命令主要用于创建目录 • 语法: mkdir [选项] 目录名称 若指定目录不存在则创建目录&#xff1b; 选项&#xff1a; -p&#xff0c;--parents 需要时创建目录的上层目录&#xff0c;若这些 目录已存在也不当作错误处理 二、Linux必备命令之…

java基础-chapter15(io流)

io流&#xff1a;存储和读取数据的解决方案 I:input O:output io流的作用&#xff1a;用于读写数据&#xff08;本地文件,网络&#xff09; io流按照流向可以分为&#xff1a; 输出流&#xff1a;程序->文件 输入流&#xff1a;文件->程序 io流按照操作文件…