Spark-SQL简介及核心编程

Spark-SQL概述:是Spark用于结构化数据处理的模块,前身是Shark。Shark基于Hive开发,使SQL-on-Hadoop性能大幅提升,但对Hive依赖制约了Spark发展。SparkSQL汲取Shark优点并重新开发,在数据兼容、性能优化和组件扩展上优势显著。2014年6月,Shark停止开发,发展出SparkSQL和Hive on Spark两个支线。

Spark-SQL特点:易整合,能无缝整合SQL查询和Spark编程;统一数据访问,以相同方式连接不同数据源;兼容Hive,可在已有仓库运行SQL或HQL;支持标准数据连接,能通过JDBC或ODBC连接。

DataFrame介绍:是基于RDD的分布式数据集,类似二维表格,与RDD区别在于带有schema元信息,支持嵌套数据类型,API更友好,性能比RDD高,因为查询计划经Spark catalyst optimiser优化。

DataSet介绍:是分布式数据集合,是DataFrame的扩展。兼具RDD强类型、使用lambda函数的能力和Spark SQL优化执行引擎的优点,用样例类定义结构信息,是强类型的,DataFrame是DataSet的特例(DataFrame = DataSet[Row]) ,可通过 as 方法相互转换。

SparkSession:是Spark最新的SQL查询起始点,它整合了SQLContext和HiveContext的功能,内部封装了SparkContext,负责实际的计算。在spark-shell中,系统会自动创建名为spark的SparkSession对象。

DataFrame

创建方式:可通过Spark的数据源创建

SQL语法查询:使用SQL语法风格查询数据时,需要借助临时视图或全局视图。先读取JSON文件创建DataFrame,如 val df1 = spark.read.json("data/user.json") ;接着对DataFrame创建临时表 df1.createOrReplaceTempView("people") ,之后就能通过SQL语句查询,如 val sqlDF = spark.sql("select * from people")  ,并使用 sqlDF.show 展示结果。创建全局表时,首次运行可能报错,需将hive-site.xml文件复制到spark的conf路径下(最好把整个hive目录放在本地文件系统中),完成配置后创建全局表 df1.createGlobalTempView("people1") ,可通过 spark.sql("SELECT * FROM global_temp.people1").show() 等语句查询展示数据。

DataFrame的DSL语法:DataFrame提供DSL管理结构化数据,使用时无需创建临时视图。操作包括创建DataFrame;选取特定列,如 df.select("username").show() ;进行列运算 df.select($"username",$"age" + 1).show ;筛选数据 df.filter($"age">18).show ;按列分组统计 df.groupBy("age").count.show  。

2. RDD转换为DataFrame:在IDEA开发时,RDD与DataFrame或DataSet相互操作需引入 import spark.implicits._  (spark为SparkSession对象变量名,且必须用val修饰),spark-shell中自动导入。可直接将RDD转为DataFrame ;实际开发常借助样例类转换,定义 case class User(name:String, age:Int)  后,通过 sc.makeRDD(List(("zhangsan",30), ("lisi",40))).map(t=>User(t._1, t._2)).toDF.show 实现转换 。

DataFrame转换为RDD:DataFrame可直接获取内部RDD 。获取的RDD存储类型为Row,可通过 collect 方法收集数据,如 val array = rdd.collect ,还能通过 getAs 方法按列名获取数据。

DataSet操作

创建DataSet:可使用样例类序列,如定义 case class Person(name: String, age: Long) 后,通过 Seq(Person("zhangsan",2)).toDS() 创建;也能用基本类型序列创建,如 Seq(1,2,3,4,5).toDS  ,但实际更多从RDD获取DataSet。

RDD与DataSet相互转换:包含case类的RDD能自动转为DataSet,如 sc.makeRDD(List(("zhangsan",30), ("lisi",49))).map(t=>User(t._1, t._2)).toDS ;DataSet可直接获取内部RDD,如 val rdd = res3.rdd  。

DataFrame和DataSet转换:DataFrame是DataSet的特例,二者可相互转换。DataFrame转DataSet,定义样例类后用 as 方法,如 val ds = df.as[User] ;DataSet转DataFrame使用 toDF 方法,如 val df = ds.toDF 。

RDD、DataFrame、DataSet关系

版本产生顺序:Spark1.0推出RDD,Spark1.3出现DataFrame,Spark1.6引入DataSet 。

共性:都是分布式弹性数据集,有惰性机制、共同函数,操作需 import spark.implicits._ ,会自动缓存运算,都有分区概念,DataFrame和DataSet可模式匹配获取字段信息。

区别:RDD常与spark mllib使用,不支持sparksql操作;DataFrame每行类型为Row,访问列值需解析,支持SparkSQL操作和便捷保存方式;DataSet与DataFrame成员函数相同,每行数据类型自定义,获取行信息更自由。三者可相互转换。

 

 

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

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

相关文章

奇趣点播系统测试报告

1.项目简介 本项目旨在搭建一个视频共享点播系统,服务器支持用户通过前端浏览器访问服务器,获取展示与观看和操作的界面,最终实现视频的上传以及观看和删改查等基础管理功能。让用户拥有良好的观看体验和分享视频的快捷方式,此外…

【Web API系列】WebSocketStream API 深度实践:构建高吞吐量实时应用的流式通信方案

前言 在当今的 Web 开发领域,实时通信已成为许多应用的核心需求。无论是即时聊天、实时数据仪表盘,还是在线游戏和金融交易系统,都需要高效的双向数据传输能力。传统的 WebSocket API 为此提供了基础支持,但在处理大规模数据流、…

基于LangGraph的智能报告生成平台项目分析

前言 不知道你是否知道或者了解OpenAI and Gemini Deep Research。他们是一种能够根据输入问题进行规划、结合网络搜索获取信息并最终呈现结果的研究工具或技术。那这样research是如何实现的呢?最近刚好看到一个实现类似功能的开源项目: open_deep_search。本文将基于该项目进…

Redis 常见的集群架构

Redis 常见的集群架构 以下是 Redis 常见的集群架构及其核心模式详解,结合其设计原理、适用场景和优缺点进行综合说明: 一、主从复制模式 架构原理 角色划分:包含一个主节点(Master)和多个从节点(Slave&…

面试宝典(C++基础)-01

文章目录 1. C++基础1.1 C++特点1.2 说说C语言和C++的区别1.3 说说 C++中 struct 和 class 的区别1.4 include头文件的顺序以及双引号""和尖括号<>的区别1.5 说说C++结构体和C结构体的区别1.6 导入C函数的关键字是什么,C++编译时和C有什么不同?1.7 C++从代码…

快速获得ecovadis认证的方法,如何提升ecovadis认证分数,有效期是多久

快速获得EcoVadis认证的方法 EcoVadis认证是企业社会责任&#xff08;CSR&#xff09;和可持续发展能力的国际评估标准&#xff0c;被广泛应用于供应链管理&#xff08;如苹果、微软、联合利华等巨头要求供应商通过EcoVadis评估&#xff09;。以下是快速获得认证的关键步骤&am…

ubuntu 安装samba

ubuntu 版本&#xff1a;Ubuntu 24.04.2 LTS 1. 保证连网 2. 安装samba sudo apt install samba 在安装结束以后&#xff0c;我们可以使用下面的命令来查看安装&#xff1a; apt list | grep samba freeipa-client-samba/noble 4.11.1-2 amd64 ldb-tools/noble 2:2.8.0samba…

基于SpringBoot的宠物健康咨询系统(源码+数据库+万字文档)

502基于SpringBoot的宠物健康咨询系统&#xff0c;系统包含三种角色&#xff1a;管理员、用户&#xff0c;顾问主要功能如下。 【用户功能】 1. 首页&#xff1a;查看系统主要信息和最新动态。 2. 公告&#xff1a;浏览系统发布的公告信息。 3. 顾问&#xff1a;浏览可提供咨询…

人工智能驱动的科研新范式及学科应用研究

人工智能&#xff08;AI&#xff09;驱动的科研新范式通过数据、算力、算法的深度耦合深度嵌入科学研究的全过程&#xff0c;引发科研流程、思考逻辑和组织模式的深刻变革。文章系统总结了AI驱动科研新范式的主要特征与形式&#xff0c;提出AI驱动科研新范式的演化方向由“科研…

代码生成工具explain的高级用法

修改 explain.cpp 中的模板部分&#xff1a; // 添加自定义头文件 cout << "#include \"CustomLib.h\"\n"; 生成支持日志的记录代码&#xff1a; cout << "Logger::init();\n"; // 自动插入初始化代码其他汇总 Magnet 多线程控制…

Vue3+elementPlus中 树形控件封装

1.组件 <template><div class"selection"><el-select placeholder"请选择" v-model"nameList" clearable clear"handleClear" ref"selectUpResId" style"width: 100%"><el-option hidden :…

辉视监狱广播对讲系统:SIP协议赋能智慧监管新生态

一、全域互联&#xff1a;构建监狱安防设备协同生态 基于SIP协议的辉视广播对讲系统&#xff0c;以"通信中枢"角色打破设备壁垒。其强大的兼容性可无缝对接监狱现有监控、门禁、报警等异构设备&#xff0c;支持GB/T 28181国标协议&#xff0c;实现跨品牌、跨系统的数…

信息系统项目管理师-工具名词解释(上)

本文章记录学习过程中,重要的知识点,是否为重点的依据,来源于官方教材和历年考题,持续更新共勉 本文章记录学习过程中,重要的知识点,是否为重点的依据,来源于官方教材和历年考题,持续更新共勉 数据收集 头脑风暴 在短时间内获得大量创意,适用于团队环境,需要引导者…

C++之二叉搜索树

目录 ⼆叉搜索树的概念 二叉搜索数的性能分析 二叉搜索树的模拟实现 定义二叉树节点结构 二叉搜索树的插入 二叉搜索树的查找 二叉搜索树的删除 中序遍历 全部代码 二叉搜索树key和key/value使用场景 key搜索场景&#xff1a; key/value搜索场景&#xff1a; key/value…

数据结构——哈希详解

数据结构——哈希详解 目录 一、哈希的定义 二、六种哈希函数的构造方法 2.1 除留取余法 2.2 平方取中法 2.3 随机数法 2.4 折叠法 2.5 数字分析法 2.6 直接定值法 三、四种解决哈希冲突的方法 3.1 开放地址法 3.1.1 线性探测法 3.1.2 二次探测法 3.2 链地址法 3…

使用U盘安装 ubuntu 系统

1. 准备U 盘制作镜像 1.1 下载 ubuntu iso https://ubuntu.com/download/ 这里有多个版本以供下载&#xff0c;本文选择桌面版。 1.2 下载rufus https://rufus.ie/downloads/ 1.3 以管理员身份运行 rufus 设备选择你用来制作启动项的U盘&#xff0c;不能选错了&#xff1b;点…

RadioMaster POCKET遥控器进入ExpressLRS界面一直显示Loading的问题解决方法

RadioMaster POCKET遥控器进入ExpressLRS界面一直显示Loading的问题解决方法 问题描述解决方法 问题描述 有一天我发现我的 RadioMaster POCKET 遥控器进入 ExpressLRS 设置界面时&#xff0c;界面却一直停留在 “Loading” 状态&#xff0c;完全无法进入设置界面。 我并没有…

计算机网络 - 三次握手相关问题

通过一些问题来讨论 TCP 协议中的三次握手机制 说一下三次握手的大致过程&#xff1f;为什么需要三次握手&#xff1f;2 次不可以吗&#xff1f;第三次握手&#xff0c;可以携带数据吗&#xff1f;第二次呢&#xff1f;三次握手连接阶段&#xff0c;最后一次ACK包丢失&#xf…

【RabbitMQ】核心概念和工作流程

文章目录 RabbitMQ 工作流程流程图 Producer 和 ConsumerConnecting 和 ChannelVirtual hostQueueExchangeRabbitMQ 工作流程 RabbitMQ 工作流程 流程图 RabbitMQ 就是一个生产者/消费者模型 Producer 就是生产者、Consumer 就是消费者Broker 是 RabbitMQ 服务器生产者和消费…

龙虎榜——20250414

今天缩量上涨有些乏力&#xff0c;压力位还在~ 2025年4月14日龙虎榜行业方向分析 一、核心主线方向 黄金与贵金属&#xff08;避险逻辑强化&#xff09; • 驱动逻辑&#xff1a;国际地缘冲突持续升温&#xff08;如中东局势、台海动态&#xff09;&#xff0c;叠加美国特朗普…