Spark SQL ---结构化数据文件处理

DataFrame概述

DataFrame的创建

创建DataFrame的两种基本方式:

已存在的RDD调用toDF()方法转换得到DataFrame

通过Spark读取数据源直接创建DataFrame

 若使用SparkSession方式创建DataFrame,可以使用spark.read从不同类型的文件中加载数据创建DataFramespark.read的具体操作,在创建Dataframe之前,为了支持RDD转换成Dataframe及后续的SQL操作,需要导入import.spark.implicits._包启用隐式转换。若使用SparkSession方式创建Dataframe,可以使用spark.read操作,从不同类型的文件中加载数据创建DataFrame,具体操作API如表4-1所示。

 1.数据准备

HDFS文件系统中的/spark目录中有一个person.txt文件,内容如下:

 2通过文件直接创建DataFrame

我们通过Spark读取数据源的方式进行创建DataFrame

scala > val personDF = spark.read.text("/spark/person.txt")
personDF: org.apache.spark.sql.DataFrame = [value: String]
scala > personDF.printSchema()
root
 |-- value: String (Nullable = true)

 

 

 

3 RDD 直接转换为 DataFrame
scala > val lineRDD = sc.textFile("/spark/person.txt").map(_.split(" "))
lineRDD: org.apache.spark.rdd.RDD[Array[String]] = MapPartitionsRDD[6] at map at <console>:24
scala > case class Person(id:Int,name:String,age:Int) defined class Person
scala > val personRDD = lineRDD.map(x => Person(x(0).toInt, x(1), x(2).toInt))
personRDD: org.apache.spark.rdd.RDD[Person] = MapPartitionsRDD[7] at map at <console>:27
scala > val personDF = personRDD.toDF()
personDF: org.apache.spark.sql.DataFrame = [id: int, name: string ... 1 more field]

DataFrame的常用操作

1. 操作DataFrame

操作DataFrame的常用方法,具体如下表如示

Dataframe提供了两种谮法风格,即DSL风格语法和SQL风格语法,二者在功能上并无区别,仅仅是根据用户习惯自定义选择操作方式。接下来,我们通过两种语法风格,分讲解Dstaframe操作的具体方法。

.DSL风格操作

DataFrame提供了一个领域特定语言(DSL)以方便操作结构化数据,下面将针对DSL操作风格,讲解DataFrame

常用操作示例,

1.show():查看DataFrame中的具体内容信息

2.pritSchema0:查看0staFrameSchema信息

3.select():查看DataFmame中造取部分列的数据,

下面演示查看xixiDF对象的name字段数据,具体代码如下所示

 select实现对列名进行重命名

 filter()/where条件查询

要求过滤age 大于44等于44的数据

 

groupBy()对数据进行分组

sort()/orderBy():对特定字段进行排序
desc:降序;asc:升序

2. SQL风格操作DataFrame

1. DataFrame注册成一个临时表

 2. 查询年龄最大的前两名人的信息

scala > spark.sql("select * from t_xixi order by age desc limit 2").show()
+---+------+---+
| id|  name|age|
+---+------+---+
|  6| jerry| 40|
|  5|tianqi| 35|
+---+------+---+

 3. 查询年龄大于25的人的信息

scala > spark.sql("select * from t_xixi where age > 25").show()
+---+-------+---+
| id   |  name |age|
+---+-------+---+
|  2   |   lisi     | 29  |
|  4   | zhaoliu| 30 |
|  5   | tianqi  | 35  |
|  6   |  jerry   | 40  |
+---+-------+---+

 Dataset概述

RDDDataFrameDataset的区别

RDD数据的表现形式,即序号(1,此时RDD数据没有数据类型元数据信息

DataFrame数据的表现形式,即序号(2,此时DataFrame数据中添加Schema元数据信息(列名和数据类型,如IDString),DataFrame每行类型固定为Row类型,每列的值无法直接访问,只有通过解析才能获取各个字段的值

 Dataset数据的表现形式,序号(34,其中序号(3是在RDD每行数据的基础之上,添加一个数据类型valueString)作为Schema元数据信息。而序号(4)每行数据添加People强数据类型,在Dataset[Person]中里存放3个字段和属性,Dataset每行数据类型可自定义,一旦定义后,就具有错误检查机制

Dataset对象的创建

1、通过SparkSession中的createDataset来创建Dataset

 

2DataFrame通过“as[ElementType]”方法转换得到Dataset

RDD转换DataFrame

Spark官方提供了两种方法实现RDD转换得到DataFrame

第一种方法是利用反射机制推断包含特定类型对象的Schema,这种方式适用于对已知数据结构的RDD转换

第二种方法通过编程接口构造一个Schema,并将其应用在已知的RDD数据中。

反射机制推断Schema

Windows系统开发Scala代码,可使用本地环境测试(需要先准备本地数据文件)。我们可以很容易的分析出当前数据文件中字段的信息,计算机无法直观感受字段实际含义,因此需要通过反射机制推断包含特定类型对象Schema信息,实现将RDD转换成DataFrame

 

反射机制推断Schema

1.创建Maven工程。

拉依赖

效果

 

编程方式定义Schema

Case类不能提前定义Schema时,就需要采用编程方式定义Schema信息,实现RDD转换DataFrame的功能。

 

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

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

相关文章

【美团面试2024/05/14】前端面试题滑动窗口

一、题目描述 设有一字符串序列 s&#xff0c;确定该序列中最长的无重复字母的子序列&#xff0c;并返回其长度。 备注 0 < s.length < 5 * 104 s 由英文字母、数字、符号和空格组成 示例1 输入 s "abcabcbb" 输出 3 二、原题链接 这道题在LeetCode上的原题链…

运维别卷系列 - 云原生监控平台 之 06.prometheus pushgateway 实践

文章目录 [toc]Pushgateway 简介Pushgateway 部署创建 svc创建 deployment Pushgateway 测试删除 Pushgateway 上对应 lable 的数据 Pushgateway 简介 WHEN TO USE THE PUSHGATEWAY Pushgateway 是一种中介服务&#xff0c;允许您从无法抓取的作业中推送指标。 The Pushgateway…

Python NumPy数组的创建方法

Numpy是Python中科学计算的基础包&#xff0c;其核心对象就是ndarray&#xff08;n维数组&#xff09;。利用数组可以快速执行逻辑&#xff0c;形状操作&#xff0c;统计和傅里叶变换等运算&#xff0c;其效率比Python原生的数组效率更高。因此使用Numpy的第一件事就是创建Nump…

构建第一个ArkTS应用之@LazyForEach:数据懒加载

LazyForEach从提供的数据源中按需迭代数据&#xff0c;并在每次迭代过程中创建相应的组件。当在滚动容器中使用了LazyForEach&#xff0c;框架会根据滚动容器可视区域按需创建组件&#xff0c;当组件滑出可视区域外时&#xff0c;框架会进行组件销毁回收以降低内存占用。 接口…

线性/非线性最小二乘 与 牛顿/高斯牛顿/LM 原理及算法

最小二乘分为线性最小二乘和非线性最小二乘 最小二乘目标函数都是min ||f(x)||2 若f(x) ax b&#xff0c;就是线性最小二乘&#xff1b;若f(x) ax2 b / ax2 bx 之类的&#xff0c;就是非线性最小二乘&#xff1b; 1. 求解线性最小二乘 【参考】 2. 求解非线性最小二乘…

玩转大模型 企业AI着陆新正解 神州问学AI原生赋能平台正式发布

在人工智能技术日新月异的今天&#xff0c;神州数码凭借深厚的行业洞察和技术积累&#xff0c;揭开了AI原生赋能平台——神州问学的神秘面纱。作为企业AI着陆的加速引擎&#xff0c;神州问学致力于通过AI原生场景赋能&#xff0c;为企业开辟一条通往智能未来的坦途。 神州问学—…

出国旅游常用英语,柯桥成人英语培训

Where can I catch a taxi?哪里我可以叫到出租车&#xff1f; The taxi zone is right on the left corner over there.出租车站台就在左边转角处。 Are you free?您有空吗&#xff1f; Sure. Where are you going?当然。您要去哪里&#xff1f; Drive me back to Santa …

2024年淘宝京东天猫618红包领取跨店满减优惠券活动时间是从什么时候开始到几月几号结束?

2024年淘宝、天猫、京东618红包领取口令及活动时间已发布&#xff0c;具体如下&#xff1a; 一、2024年淘宝天猫618活动 1.1、2024年淘宝天猫618活动时间 2024年5月20日开始持续到6月20日结束&#xff1b; 1.2、2024年淘宝天猫618红包领取 在活动时间内&#xff0c;每天都可…

如何通过radsystem源代码启动项目

大家有没有想过这样一个问题&#xff0c;如果别人没有下载radsystems&#xff0c;别人该如何打开我们的项目呢&#xff0c;那么今天我来介绍一下&#xff0c;如何启动radsystem源代码。 一般来说我们都是需要打开radsystems的publish部署项目 但是我们可以通过它部署后的源代码…

内存函数:memcpy(拷贝),memmove(拷贝),memcmp(比较),memset(设置)

内存函数 一.memcpy&#xff08;内存拷贝1&#xff09;1.函数使用2.模拟实现 二.memmove&#xff08;内存拷贝2&#xff09;1.函数使用2.模拟实现 三.memcmp&#xff08;内存比较&#xff09;1.函数使用2.模拟实现 四.memset&#xff08;内存设置&#xff09;1.函数使用2.模拟实…

axios封装 手动取消接口请求

axios封装 手动取消接口请求 1.创建clearHttpRequest.js文件2.封装的axios文件中使用3.vue文件中引入4. 路由切换使用 对于一些接口loading很久&#xff0c;用户想手动终止请求的需求&#xff0c; 并为了节约性能&#xff0c;当路由切换时&#xff0c;cancel掉还没有结束的接口…

Redis经典问题:BigKey问题

大家好,我是小米,今天来和大家聊聊Redis中的一个经典问题:BigKey问题。在互联网系统中,我们经常需要保存大量的用户数据,比如用户的个人信息、粉丝列表、发表的微博内容等等。这些数据往往会被存储在Redis这样的缓存系统中,以提高系统的性能和响应速度。但是,在处理这些…

算法考试题

分治法课堂案例 第1关&#xff1a;二分搜索技术 任务描述 本关任务&#xff1a;给定一组有序整数&#xff0c;用二分查找技术查找X是否在序列中&#xff0c;在则输出Yes&#xff0c;不在则输出No。 输入格式&#xff1a;三行&#xff0c;第一行一个整数n&#xff0c;第二行…

相机模型的内参、外参

相机模型的内参、外参 文章目录 相机模型的内参、外参1. 针孔模型、畸变模型&#xff08;内参&#xff09;2. 手眼标定&#xff08;外参&#xff09; Reference 这篇笔记主要参考&#xff1a;slam十四讲第二版&#xff08;高翔&#xff09; 相机将三维世界中的坐标点&#xff…

2024年加密软件市场大比拼:谁将成为数据保护的新星

在2024年的加密软件市场&#xff0c;一场激烈的竞争正在上演。各大厂商纷纷推出自家的最新产品&#xff0c;旨在为用户提供更加安全、可靠的数据保护方案。在这场大比拼中&#xff0c;谁将成为数据保护的新星&#xff0c;引领市场的新潮流呢&#xff1f; 首先&#xff0c;我们…

收藏与品鉴:精酿啤酒的艺术之旅

啤酒&#xff0c;这一古老的酒精饮品&#xff0c;不仅是人们生活中的日常饮品&#xff0c;更是一种艺术和文化的载体。对于Fendi club啤酒而言&#xff0c;收藏与品鉴更是一门深入骨髓的艺术之旅。 Fendi club啤酒的收藏&#xff0c;不仅仅是简单的存放和保管&#xff0c;而是一…

阿里云域名备案流程

阿里云域名备案流程大致可以分为以下几个步骤&#xff0c;这些信息综合了不同来源的最新流程说明&#xff0c;确保了流程的时效性和准确性&#xff1a; UP贴心的附带了链接&#xff1a; 首次备案流程&#xff1a;ICP首次备案_备案(ICP Filing)-阿里云帮助中心 (aliyun.com) …

AUS GLOBAL 与皇家贝蒂斯在对战皇家马德里的比赛日举办现场体验活动

AUS Global 最近前往西班牙庆祝与皇家贝蒂斯的赞助合作&#xff0c;并获得了难忘的比赛日体验&#xff0c;包括在贵宾室中观看皇家贝蒂斯对阵皇家马德里的精彩比赛。 活动开始时&#xff0c;AUS Global 受邀来到皇家贝蒂斯主场贝尼托-比利亚马林体育场的独家 Showbox 贵宾室。…

2024深圳杯数学建模C题参考论文24页+完整代码数据解题

一、问题研究 24页参考论文&#xff1a; 【编译器识别】2024深圳杯C题24页参考论文1-3小问完整解题代码https://www.jdmm.cc/file/2710545/ 为了回答这些问题&#xff0c;我们需要进行一系列的编译实验、分析编译结果&#xff0c;并构建判别函数。以下是对这些问题的初步分析…

P9748 [CSP-J 2023] 小苹果:做题笔记

目录 P9748 [CSP-J 2023] 小苹果 思路 代码 P9748 [CSP-J 2023] 小苹果 P9748 [CSP-J 2023] 小苹果 思路 先写几个看看规律 题意我们能看出来是三个三个一组的&#xff0c;然后每次取走的都是三个里面的第一个。我们应该很容易想到如果一轮的总数是三的倍数的话&#xff0…