大数据学习之SparkSql

95.SPARKSQL_简介

网址: https://spark.apache.org/sql/
Spark SQL Spark 的一个模块,用于处理 结构化的数据
SparkSQL 特点
1
易整合
无缝的整合了 SQL 查询和 Spark 编程,随时用 SQL
DataFrame API 处理结构化数据。并且支持多语言 Java
Scala Python R
2
统一的数据访问
使用相同的方式连接不同的数据源或不同的文件格式中的数
据。
3
兼容 Hive
在已有的数据仓库上直接运行 SQL 或者 HiveQL ,也可以使
SparkSQL 直接处理数据并生成 Hive 数据表。
1 4
标准的数据连接
支持标准化的 JDBC\ODBC 连接 , 方便和各种数据进行数据交换
实时效果反馈
1. 关于 SparkSQL 特点的描述,错误的是:
A
易整合:无缝的整合了 SQL 查询和 Spark 编程,随时用
SQL DataFrame API 处理结构化数据。并且支持多语言 Java
Scala Python R
B
统一的数据访问:使用相同的方式连接不同的数据源或不同
的文件格式中的数据。
C
不兼容 Hive
D
支持标准化的 JDBC\ODBC 连接 , 方便和各种数据进行数据交
换。
答案:
1=>C 兼容 Hive

96.SPARKSQL_发展史

Hive 是早期唯一运行在 Hadoop 上的 SQL-on-Hadoop 工具。但
MapReduce 计算过程中大量的中间磁盘落地过程消耗了大量的
I/O ,降低的运行效率,为了提高 SQL-on-Hadoop 的效率,大量的
SQL-on-Hadoop 工具开始产生,其中表现较为突出的是: Impala
Shark Drill
其中 Shark 是伯克利实验室 Spark 生态环境的组件之一,是基于
Hive 所开发的工具。 Shark 对于 Hive 的太多依赖,制约了 Spark 各个
组件的相互集成,所以提出了 SparkSQL 项目。
SparkSQL 抛弃原有 Shark 的代码,汲取了 Shark 的一些优点,
如内存列存储( In-Memory Columnar Storage )、 Hive 兼容性
等,重新开发了 SparkSQL 代码;由于摆脱了对 Hive 的依赖性,
SparkSQL 无论在数据兼容、性能优化、组件扩展方面都得到了极大
的方便。
相关时间节点
1
2014 1.0 正式发布, Shark 项目和 SparkSQL 项目的主持人
Reynold Xin 宣布:停止对 Shark 的开发,团队将所有资源放
SparkSQL 项目上,至此, Shark 的发展画上了句话,但也因
此发展出两个支线: SparkSQL Hive on Spark
3 2
2015 1.3 发布 DataFrame 数据结构 , 沿用至今
3
2016 1.6 发布 Dataset 数据结构 ( 带泛型的 DataFrame),
用于支持泛型的语言 Java Scala
4
2016 2.0 统一了 Dataset DataFrame, 以后只有 Dataset
, Python 用的 DataFrame 就是没有泛型的 Dataset
5
2019 3.0 发布, 性能大幅度提升, SparkSQL 变化不大。
6
2021 3.2 发布,支持 Java Python Scala R
总结:
SparkSQL 用于处理大规模结构化数据的计算引擎
1
SparkSQL 在企业中广泛使用,并性能极好。
2
SparkSQL :使用简单、 API 统一、兼容 HIVE 、支持标准化 JDBC ODBC 连接
3
SparkSQL 2014 年正式发布,当下使用最多的 2.3
4
Spark 发布于 2016 年,当下使用的最新 3.2.1 办发布于 2022

97.SPARKSQL_与HIVE区别

98.SPARKSQL_SPARKSESSION

99.SPARKSQL_数据抽象

100.SPARKSQL_DATAFRAME概述

101.SPARKSQL_DATASET概述

102.SPARKSQL_DATAFRAME构成

103.SPARKSQL_创建项目

104.SPARKSQL_createDataFrame创建DF

package com . itbaizhan . sql
import org . apache . spark . SparkConf
import org . apache . spark . rdd . RDD
import org . apache . spark . sql . types .
{ IntegerType , StringType , StructField ,
StructType }
import org . apache . spark . sql .{ DataFrame , Row ,
SparkSession }
1
2
3
4
5
6
7
15 object CreateDataFrame {
def main ( args : Array [ String ]): Unit = {
//1. 创建上下文配置文件对象
val conf = new
SparkConf (). setMaster ( "local[*]" )
    . setAppName ( "CreateDataFrame" )
//2. 创建执行环境入口 SparkSession 对象
val spark : SparkSession =
SparkSession . builder ()
    . config ( conf ). getOrCreate ()
//3. 读取文件,映射创建 RDD[Row] 对象
val rdd : RDD [ Row ] = spark . sparkContext
    . textFile ( "data/sql/student.txt" )
    . map ( _ . split ( "," ))
    . map ( array => Row ( array ( 0 ). toInt ,
array ( 1 ). trim , array ( 2 ). toInt ))
//4. 定义 StructType 对象,指定所有列名和各自的类
val schema : StructType = StructType (
StructField ( "id" , IntegerType , false )
::
StructField ( "name" , StringType ,
false ) ::
StructField ( "age" , IntegerType ,
true ) :: Nil )
//5. 基于 rdd 对象转为 DataFrame
val df : DataFrame =
spark . createDataFrame ( rdd , schema )
//6. 打印 df 的表结构信息
df . printSchema ()
//7. 输出 df 中的数据
df . show ()
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
16 运行输出:

SparkSQL_toDF创建DF

RDD 转换为 DataFrame :使用 RDD toDF 方法转换 RDD
// 关闭
spark . stop ()
}
}
32
33
34
35
# 打印 DataFrame 的表结构
root
|-- id: long (nullable = true)
|-- name: string (nullable = true)
|-- age: long (nullable = true)
#df 中的数据
+---+-----+---+
|id |name |age|
+---+-----+---+
|1 |tom |22 |
|2 |lucy |21 |
|3 |peter|23 |
|4 |john |25 |
+---+-----+---+

105.SPARKSQL_toDF创建DF

IDEA 中开发程序时,如果需要 RDD DF 或者 DS 之间互相转
换操作,那么需要引入
import spark.implicits._
package com . itbaizhan . sql
import org . apache . spark . SparkConf
import org . apache . spark . rdd . RDD
import org . apache . spark . sql .{ DataFrame ,
SparkSession }
object ToDFDemo1 {
def main ( args : Array [ String ]): Unit = {
//1. 创建配置文件对象
val conf : SparkConf = new SparkConf ()
. setMaster ( "local[*]" ). setAppName ( "toDF" )
//2. 创建 SparkSession 对象
val spark : SparkSession =
SparkSession . builder (). config ( conf ). getOrCre
ate ()
//4. 添加隐式转换
import spark . implicits . _
//5. 读取本地文件,并映射创建 RDD
val rdd : RDD [( Int , String , Int )] =
spark . sparkContext
    . textFile ( "data/sql/student.txt" )
//RDD[String]"1,tom,22"-
>RDD[Array[String]]
    . map ( _ . split ( "," ))
//RDD[Array[String]]->RDD[(Int,
String, Int)]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
18 运行输出:
    . map ( arr => ( arr ( 0 ). toInt ,
arr ( 1 ). trim , arr ( 2 ). toInt ))
//6. 通过 rdd.toDF(colNames: String*)
//val df: DataFrame = rdd.toDF()// 了解
val df : DataFrame = rdd . toDF ( "id" ,
"name" , "age" )
//7. 输出结构信息
df . printSchema ()
//8. 输出 df 中的数据
/**show(numRows: Int, truncate: Boolean)
* numRows: 表示输出数据的行数 , 默认是 20 .
* truncate: 表示输出时是否对列的值进行截取
*     false: 表示不截取
*     true: 表示截取,保留 20 个字符
*/
//df.show()
//df.show(2,false)
df . show ( 10 , false )
//3. 关闭 spark
spark . stop ()
}
}
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
19 SparkSQL_toDF 使用样例类创建 DF
实际开发中,一般通过样例类将 RDD 转换为 DataFrame
IDEA 中开发程序时,如果需要 RDD DF 或者 DS 之间互相转
换操作,那么需要引入
import spark.implicits._
定义样例类 Student
root
|-- id: integer (nullable = false)
|-- name: string (nullable = true)
|-- age: integer (nullable = false)
+---+-----+---+
| id| name|age|
+---+-----+---+
| 1| tom| 22|
| 2| lucy| 21|
| 3|peter| 23|
| 4| john| 25|
+---+-----+---+

106.SPARKSQL_toDF使用样例创建DF

107.SPARKSQL_DataFrame转换RDD

108.SPARKSQL_创建DATASET

109.SPARKSQL_DATASET和RDD转换

110.SPARKSQL_DATASET和DATAFRAME转换

111.SPARKSQL_读写parquet文件

https://spark.apache.org/docs/latest/sql-data-sources.html

112.SPARKSQL_读写parquet文件扩展

113.SPARKSQL_读写text文件

114.SPARKSQL_读写JSON文件

115.SPARKSQL_读写csv文件

116.SPARKSQL_JDBC读写MYSQL

117.SPARKSQL_JDBC写MYSQL

118.SPARKSQL_SPARKONHIVE概述

119.SPARKSQL_SPARKONHIVE配置

120.SPARKSQL_SPARKONHIVE代码开发一

121.SPARKSQL_SPARKONHIVE代码开发二

122.SPARKSQL_SPARKONHIVE代码集群提交

123.SPARKSQL_DSL_API

124.SPARKSQL_数据去重

125.SPARKSQL_function包

126.SPARKSQL_SQL API

127.SPARKSQL_SQL API实战

128.SPARKSQL_自定义函数概述

129.SPARKSQL_自定义UDF函数

130.SPARKSQL_自定义UDF函数扩展

131.SPARKSQL_ARRAYTYPE返回值类型的UDF

132.SPARKSQL_UDAF函数OLD一

133.SPARKSQL_UDAF函数OLD二

134.SPARKSQL_UDAF函数OLD三

135.SPARKSQL_UDAF函数OLD四

136.SPARKSQL_UDAF函数NEW一

137.SPARKSQL_UDAF函数NEW二

138.SPARKSQL_UDAF函数NEW三

139.SPARKSQL_

140.SPARKSQL_

141.SPARKSQL实战_

142.SPARKSQL实战_

143.SPARKSQL实战_

144.SPARKSQL实战_

145.SPARKSQL实战_

146.SPARKSQL实战_

147.SPARKSQL实战_

148.SPARKSQL实战_

149.SPARKSQL实战_

150.SPARKSQL实战_

151.SPARKSQL实战_

152.SPARKSQL实战_

153.SPARKSQL实战_

154.SPARKSQL实战_

155.SPARKSQL实战_

156.SPARKSQL实战_

157.SPARKSQL实战_

158.SPARKSQL实战_

159.SPARKSQL实战_

160.SPARKSQL实战_

161.SPARKSQL实战_

162.SPARKSQL实战_

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

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

相关文章

k8s的操作指令和yaml文件

一、项目的生命周期 创建----》发布----》更新----》回滚----》删除 1.创建 kubectl create deployment nginx1 --imagenginx:1.22 --replicas3 #基于deployment控制器创建pod,控制器的名称是nginx1,pod使用的镜像是nginx:1.22,pod的数量有3个 2.发布 ku…

解锁 DeepSeek 模型高效部署密码:蓝耘平台全解析

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

k8s部署rabbitmq

1. 创建provisioner制备器(如果已存在,则不需要) 1.1 编写nfs-provisioner-rbac.yaml配置文件 apiVersion: v1 kind: ServiceAccount metadata:name: nfs-client-provisionernamespace: wms --- kind: ClusterRole apiVersion: rbac.author…

评估大模型(LLM)摘要生成能力:方法、挑战与策略

大语言模型(LLMs)有着强大的摘要生成能力,为信息快速提取和处理提供了便利。从新闻文章的快速概览到学术文献的要点提炼,LLMs 生成的摘要广泛应用于各个场景。然而,准确评估这些摘要的质量却颇具挑战。如何确定一个摘要…

dmd-50

dmd-50 一、查壳 无壳,64位 二、IDA分析 main 下面的内容中数据经过R键转换,你就会知道v41的内容,以及是当v41成立时key是有效的。 v41870438d5b6e29db0898bc4f0225935c0 结合上面的函数知道:v41经过MD5解密后是key 注意是…

关于图像锐化的一份介绍

在这篇文章中,我将介绍有关图像锐化有关的知识,具体包括锐化的简单介绍、一阶锐化与二阶锐化等方面内容。 一、锐化 1.1 概念 锐化(sharpening)就是指将图象中灰度差增大的方法,一次来增强物体的轮廓与边缘。因为发…

全程Kali linux---CTFshow misc入门(38-50)

第三十八题: ctfshow{48b722b570c603ef58cc0b83bbf7680d} 第三十九题: 37换成1,36换成0,就得到长度为287的二进制字符串,因为不能被8整除所以,考虑每7位转换一个字符,得到flag。 ctfshow{5281…

vue3学习四

七 标签ref属性 设置标签ref属性&#xff0c;类似于设置标签id。 普通标签 <template name"test4"> <p ref"title" id"title" click"showinfo">VIEW4</p> <View3/><script lang"ts" setup>…

STM32 软件SPI读写W25Q64

接线图 功能函数 //写SS函数 void My_W_SS(uint8_t BitValue) {GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)BitValue); }//写SCK函数 void My_W_SCK(uint8_t BitValue) {GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)BitValue); }//写MOSI函数 void My_W_MOSI(uint8_t Bit…

pytest-xdist 进行多进程并发测试

在自动化测试中&#xff0c;运行时间过长往往是令人头疼的问题。你是否遇到过执行 Pytest 测试用例时&#xff0c;整个测试流程缓慢得让人抓狂&#xff1f;别担心&#xff0c;pytest-xdist 正是解决这一问题的利器&#xff01;它支持多进程并发执行&#xff0c;能够显著加快测试…

CLion2024.3.2版中引入vector头文件报错

报错如下&#xff1a; 在MacBook端的CLion中引入#include <vector>报 vector file not found&#xff08;引入map、set等也看参考此方案&#xff09;&#xff0c;首先可以在Settings -> Build,Execution,Deployment -> Toolchains中修改C compiler和C compiler的路…

【RocketMQ 存储】- 同步刷盘和异步刷盘

文章目录 1. 前言2. 概述3. submitFlushRequest 提交刷盘请求4. FlushDiskWatcher 同步刷盘监视器5. 同步刷盘但是不需要等待刷盘结果6. 小结 本文章基于 RocketMQ 4.9.3 1. 前言 RocketMQ 存储部分系列文章&#xff1a; 【RocketMQ 存储】- RocketMQ存储类 MappedFile【Rock…

了解传输层TCP协议

目录 一、TCP协议段格式 二、TCP原理 1.确认应答 2.超时重传 3.连接管理 建立连接 断开连接 4.滑动窗口 5.流量控制 6.拥塞控制 7.延时应答 8.捎带应答 9.面向字节流 10.TCP异常情况 TCP&#xff0c;即Transmission Control Protocol&#xff0c;传输控制协议。人如…

第 26 场 蓝桥入门赛

3.电子舞龙【算法赛】 - 蓝桥云课 问题描述 话说这年头&#xff0c;连舞龙都得电子化&#xff01;这不&#xff0c;蓝桥村的老程序员王大爷突发奇想&#xff0c;用LED灯带和一堆传感器鼓捣出了一条“电子舞龙”&#xff0c;它能根据程序指令在村里的广场上“翩翩起舞”。 广…

老游戏回顾:TL2

TL2是一部ARPG游戏&#xff0c;是TL的续作游戏&#xff0c;由位于美国西雅图的Runic Games开发&#xff0c;游戏于2012年9月20日上市&#xff0c;简体中文版于2013年4月10日在国内上市。 2有非常独特的艺术风格&#xff0c;这些在1中就已经形成&#xff0c;经过升级将使这款游…

前端实现 GIF 图片循环播放

前言 使用 img 加载 GIF 图片&#xff0c;内容只会播放一次&#xff0c;之后就会自动暂停&#xff1b; 通过定时器在一段时间后重新加载图片的方式&#xff0c;会导致浏览器内存不断增大&#xff0c;并且可能会有闪烁、卡顿的问题&#xff1b; ImageDecoder WebCodecs API 的…

1-2 面向对象编程方法

1.0 面向对象编程思维 在面向对象风格中&#xff0c;结构体被看做数据&#xff08;data&#xff09;&#xff0c;而操作数据的函数称作方法&#xff08;method&#xff09;。目前函数 和数据是分离的&#xff0c;函数并不直接操作数据&#xff0c;我们需要拿到函数返回的结果&a…

LVGL4种输入设备详解(触摸、键盘、实体按键、编码器)

lvgl有触摸、键盘、实体按键、编码器四种输入设备 先来分析一下这四种输入设备有什么区别 &#xff08;1&#xff09;LV_INDEV_TYPE_POINTER 主要用于触摸屏 用到哪个输入设备保留哪个其他的也是&#xff0c;保留触摸屏输入的任务注册&#xff0c;其它几种种输入任务的注册&…

让文物“活”起来,以3D数字化技术传承文物历史文化!

文物&#xff0c;作为不可再生的宝贵资源&#xff0c;其任何毁损都是无法逆转的损失。然而&#xff0c;当前文物保护与修复领域仍大量依赖传统技术&#xff0c;同时&#xff0c;文物管理机构和专业团队的力量相对薄弱&#xff0c;亟需引入数字化管理手段以应对挑战。 积木易搭…

如何通过 ESPN API 获取 NBA 球队的赛程表

对于 NBA 爱好者和开发者来说&#xff0c;通过 API 获取球队赛程表是一项非常实用的功能&#xff0c;尤其是如果你正在构建一个应用或网站&#xff0c;需要自动化获取比赛安排的情况下。今天&#xff0c;我将为大家介绍如何通过 ESPN 提供的 API 获取 NBA 球队的赛程表。 1. ES…