大数据学习之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实战_

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

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

相关文章

RabbitMQ 从入门到精通:从工作模式到集群部署实战(四)

#作者:闫乾苓 系列前几篇: 《RabbitMQ 从入门到精通:从工作模式到集群部署实战(一)》:link 《RabbitMQ 从入门到精通:从工作模式到集群部署实战(二)》: lin…

ip地址是手机号地址还是手机地址

在数字化生活的浪潮中,IP地址、手机号和手机地址这三个概念如影随形,它们各自承载着网络世界的独特功能,却又因名称和功能的相似性而时常被混淆。尤其是“IP地址”这一术语,经常被错误地与手机号地址或手机地址划上等号。本文旨在…

Django开发入门 – 0.Django基本介绍

Django开发入门 – 0.Django基本介绍 A Brief Introduction to django By JacksonML 1. Django简介 1) 什么是Django? 依据其官网的一段解释: Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. …

深度解析DeepSeek模型系列:从轻量级到超大规模(附DeepSeek硬件配置清单)

在人工智能领域,深度学习模型的选择对于任务的执行效率和精度至关重要。DeepSeek模型系列提供了多种不同参数量的版本,以满足不同场景下的需求。本文将详细解析DeepSeek模型系列的特点、适用场景以及硬件需求。 DeepSeek模型系列概览 DeepSeek模型系列…

树和二叉树_7

树和二叉树_7 一、leetcode-102二、题解1.引库2.代码 一、leetcode-102 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 样例输入:root [3,9,20,null,nu…

【DeepSeek】私有化本地部署图文(Win+Mac)

目录 一、DeepSeek本地部署【Windows】 1、安装Ollama 2、配置环境变量 3、下载模型 4、使用示例 a、直接访问 b、chatbox网页访问 二、DeepSeek本地部署【Mac】 1、安装Ollama 2、配置环境变量 3、下载模型 4、使用示例 5、删除已下载的模型 三、DeepSeek其他 …

<tauri><rust><GUI>基于rust和tauri,在已有的前端框架上手动集成tauri示例

前言 本文是基于rust和tauri,由于tauri是前、后端结合的GUI框架,既可以直接生成包含前端代码的文件,也可以在已有的前端项目上集成tauri框架,将前端页面化为桌面GUI。 环境配置 系统:windows 10 平台:visu…

每日学习 设计模式 五种不同的单例模式

狮子大佬原文 https://blog.csdn.net/weixin_40461281/article/details/135050977 第一种 饿汉式 为什么叫饿汉,指的是"饿" 也就是说对象实例在程序启动时就已经被创建好,不管你是否需要,它都会在类加载时立即实例化,也就是说 实例化是在类加载时候完成的,早早的吃…

从技术体系到实践案例:浪潮信息解码金融算力演进路径

作为金融科技领域的重要参与者,浪潮信息作为核心参编单位,联合中国金电、工商银行等33家机构共同完成《中国金融科技发展报告(2024)》(以下简称蓝皮书)编撰。浪潮信息凭借在数字基础设施领域的技术积累&…

题海拾贝:【高精度】减法

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 1、题…

知识库升级新思路:用生成式AI打造智能知识助手

在当今信息爆炸的时代&#xff0c;企业和组织面临着海量数据的处理和管理挑战。知识库管理系统&#xff08;Knowledge Base Management System, KBMS&#xff09;作为一种有效的信息管理工具&#xff0c;帮助企业存储、组织和检索知识。然而&#xff0c;传统的知识库系统往往依…

设计模式-生产者消费者模型

阻塞队列&#xff1a; 在介绍生产消费者模型之前&#xff0c;我们先认识一下阻塞队列。 阻塞队列是一种支持阻塞操作的队列&#xff0c;常用于生产者消费者模型&#xff0c;它提供了线程安全的队列操作&#xff0c;并且在队列为空或满时&#xff0c;能够阻塞等待&#xff0c;…

1Panel应用推荐:WordPress开源博客软件和内容管理系统

1Panel&#xff08;github.com/1Panel-dev/1Panel&#xff09;是一款现代化、开源的Linux服务器运维管理面板&#xff0c;它致力于通过开源的方式&#xff0c;帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用&#xff0c;1Panel特别开通应用商店&am…

计算机毕业设计Tensorflow+LSTM空气质量监测及预测系统 天气预测系统 Spark Hadoop 深度学习 机器学习 人工智能

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

语言月赛 202308【小粉兔做麻辣兔头】题解(AC)

》》》点我查看「视频」详解》》》 [语言月赛 202308] 小粉兔做麻辣兔头 题目描述 粉兔喜欢吃麻辣兔头&#xff0c;麻辣兔头的辣度分为若干级&#xff0c;用数字表示&#xff0c;数字越大&#xff0c;兔头越辣。为了庆祝粉兔专题赛 #1 的顺利举行&#xff0c;粉兔要做一些麻…

激活函数篇 02 —— 双曲正切函数tanh

本篇文章收录于专栏【机器学习】 以下是激活函数系列的相关的所有内容: 一文搞懂激活函数在神经网络中的关键作用 逻辑回归&#xff1a;Sigmoid函数在分类问题中的应用 tanh ⁡ ( x ) e x − e − x e x e − x \tanh(x)\frac{e^x - e^{-x}}{e^x e^{-x}} tanh(x)exe−xex…

STM32G0B1 ADC DMA normal

目标 ADC 5个通道&#xff0c;希望每1秒采集一遍&#xff1b; CUBEMX 配置 添加代码 #define ADC1_CHANNEL_CNT 5 //采样通道数 #define ADC1_CHANNEL_FRE 3 //单个通道采样次数&#xff0c;用来取平均值 uint16_t adc1_val_buf[ADC1_CHANNEL_CNT*ADC1_CHANNEL_FRE]; //传递…

【数据结构】链表应用1

链表应用 面试题 02.02.返回倒数第k个节点题目描述思路解题过程复杂度 查找相同后缀题目描述解题思路完整代码&#xff1a; 删除绝对值相等的节点题目描述解题思路代码 面试题 02.02.返回倒数第k个节点 题目描述 实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回…

【JVM详解一】类加载过程与内存区域划分

一、简介 1.1 概述 JVM是Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&#xff0c;是通过在实际的计算机上仿真模拟各种计算机功能来实现的。由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组成。JVM屏蔽了与操作系统平台相关…

基于STM32设计的仓库环境监测与预警系统

目录 项目开发背景设计实现的功能项目硬件模块组成设计思路系统功能总结使用的模块的技术详情介绍总结 1. 项目开发背景 随着工业化和现代化的进程&#xff0c;尤其是在制造业、食品业、医药业等行业&#xff0c;仓库环境的监控和管理成为了至关重要的一环。尤其是在存储易腐…