Spark-SQL核心编程(一)
一、Spark-SQL 基础概念
1.定义与起源:Spark SQL 是 Spark 用于结构化数据处理的模块,前身是 Shark。Shark 基于 Hive 开发,提升了 SQL-on-Hadoop 的性能,但因对 Hive 依赖过多限制了 Spark 发展,后被 SparkSQL 取代,同时产生了 SparkSQL 和 Hive on Spark 两个发展方向。
2.特点:易整合,可无缝整合 SQL 查询和 Spark 编程;统一数据访问,以相同方式连接不同数据源;兼容 Hive,能在已有仓库上运行 SQL 或 HQL;支持标准数据连接,可通过 JDBC 或 ODBC 连接。
二、Spark-SQL 核心编程
1.SparkSession:是 Spark 最新的 SQL 查询起始点,封装了 SparkContext,整合了 SQLContext 和 HiveContext 的功能,在 spark-shell 中会自动创建名为 spark 的 SparkSession 对象。
2.DataFrame 操作
DataFrame 是一种以 RDD 为基础的分布式数据集,类似于传统数据库中 的二维表格
2.1创建方式:可通过 Spark 数据源(如 JSON 文件)、现有 RDD 转换或 Hive Table 查询返回创建。从文件读取数据时,数字类型默认以 bigint 接收 。

2.2查询语法:SQL 语法需借助临时视图或全局视图,先创建 DataFrame 再创建视图,然后用 SQL 语句查询;

DSL 语法可直接操作 DataFrame,无需创建视图,支持查看 Schema、选择列、运算、过滤、分组等操作。
(1)创建一个 DataFrame
( 2)查看schema信息
(3)只查看"username"列数据
(4)查看"username"列数据以及"age+1"数据

df.select('username, 'age + 1).show()
(5)查看"age"大于"18"的数据
(6)按照"age"分组,查看数据条数

与 RDD 转换:RDD 转 DataFrame 可通过引入import spark.implicits._(spark-shell 中自动导入),并借助样例类实现;DataFrame 可直接获取内部 RDD,其存储类型为 Row。
RDD 转换为 DataFrame

DataFrame 转换为 RDD

3.DataSet 操作
DataSet 是分布式数据集合
3.1创建方式:可使用样例类序列或基本类型序列创建,实际中常通过 RDD 得到 DataSet。
(1)使用样例类序列创建 DataSet

(2)使用基本类型的序列创建 DataSet

3.2与 RDD 转换:包含 case 类的 RDD 可自动转换为 DataSet,DataSet 也可直接获取内部 RDD
RDD 转换为 DataSet

DataSet 转换为 RDD

3.3与 DataFrame 转换:DataFrame 是 DataSet 的特例(DataFrame = DataSet[Row]),二者可相互转换,DataFrame 转 DataSet 需借助样例类,DataSet 转 DataFrame 使用toDF方法。
DataFrame 转换为 DataSet

DataSet 转换为 DataFrame

三、RDD、DataFrame、DataSet 关系
产生版本:RDD 在 Spark1.0 出现,DataFrame 在 Spark1.3 出现,DataSet 在 Spark1.6 出现。
共性:都是 Spark 平台下的分布式弹性数据集,具有惰性机制,有共同函数,操作时多需import spark.implicits._,会自动缓存运算,都有分区概念,DataFrame 和 DataSet 可通过模式匹配获取字段信息。
区别:RDD 常与 spark mllib 使用,不支持 sparksql 操作;DataFrame 每行类型为 Row,需解析获取字段值,与 DataSet 支持 SparkSQL 操作和便捷保存方式;DataSet 是强类型,每行数据类型取决于自定义 case class ,与 DataFrame 成员函数相同但每行数据类型不同。
相关文章:
Spark-SQL核心编程(一)
一、Spark-SQL 基础概念 1.定义与起源:Spark SQL 是 Spark 用于结构化数据处理的模块,前身是 Shark。Shark 基于 Hive 开发,提升了 SQL-on-Hadoop 的性能,但因对 Hive 依赖过多限制了 Spark 发展,后被 SparkSQL 取代&…...
Android WiFi获取动态IP地址
Android开发中获取WiFi动态IP地址可通过以下方法实现,需结合网络状态管理和API调用: 一、权限配置 在AndroidManifest.xml中添加必要权限: <uses-permission android:name"android.permission.ACCESS_WIFI_STATE" /> <…...
正则表达式使用知识(日常翻阅)
正则表达式使用 一、字符匹配 1. 普通字符 描述:直接匹配字符本身。示例: abc 匹配字符串中的 “abc”。Hello 匹配字符串中的 “Hello”。 2. 特殊字符 .(点号): 描述:匹配任意单个字符(…...
AI与无人驾驶汽车:如何通过机器学习提升自动驾驶系统的安全性?
引言 想象一下,在高速公路上,一辆无人驾驶汽车正平稳行驶。突然,前方的车辆紧急刹车,而旁边车道有一辆摩托车正快速接近。在这千钧一发的瞬间,自动驾驶系统迅速分析路况,判断最安全的避险方案,精…...
第5篇:Linux程序访问控制FPGA端LEDR<三>
Q:如何具体设计.c程序代码访问控制FPGA端外设? A:以控制DE1-SoC开发板的LEDR为例的Linux .C程序代码。头文件fcntl.h和sys/mman.h用于使用/dev/mem文件,以及mmap和munmap内核函数;address_map_arm.h指定了DE1-SoC_Com…...
城市应急安防系统EasyCVR视频融合平台:如何实现多源视频资源高效汇聚与应急指挥协同
一、方案背景 1)项目背景 在当今数字化时代,随着信息技术的飞速发展,视频监控和应急指挥系统在公共安全、城市应急等领域的重要性日益凸显。尤其是在关键场所,高效的视频资源整合与传输能力对于应对突发公共事件、实现快速精准的…...
主流程序员接单平台的分类整理与分析
一、主流推荐平台 1.程序员客栈 特点:国内知名度高,需求池模式自动匹配项目,项目经理介入协调争议,流程规范。 优势:适合新手到资深开发者,资金托管安全性高,交易纠纷处理专业。 不足&…...
【笔记ing】AI大模型-03深度学习基础理论
神经网络:A neural network is a network or circuit of neurons,or in a modern sense,an artificial neural network,composed of artificial neurons or nodes.神经网络是神经元的网络或回路,或者在现在意义上来说,是一个由人工神经元或节…...
Hutool工具包中`copyProperties`和`toBean`的区别
前言 在Java开发中,对象转换是一项常见且重要的操作。Hutool作为一个功能强大的Java工具包,提供了copyProperties和toBean这两个实用的方法来帮助我们进行对象转换。然而,很多开发者对这两个方法的区别和使用场景并不十分清楚。 一、Hutool…...
高德地图 JS-SDK 实现教程
高德地图 JS-SDK 实现教程:定位、地图选点、地址解析等 适用地点选择、地址显示、表单填写等场景,全面支持移动端、手机浏览器和 PC端环境 一、创建应用&Key 前端(JS-SDK、地图组件) 登陆 高德开放平台创建应用,…...
07软件测试需求分析案例-修改用户信息
修改用户信息是后台管理菜单的一个功能模块,只有admin才有修改权限。包括查询用户名进行显示用户相关信息,并且修改用户相关信息的功能。 1.1 通读文档 通读需求规格说明书是提取信息,提出问题,输出具有逻辑、规则、流程的业务…...
分层对象模型:PO、DTO、VO、BO定义区别与使用场景
目录 前言 PO(持久化对象) DTO(数据传输对象) VO(视图对象) BO(业务对象) 关键区别总结 典型应用场景 为什么要分层设计 工具支持 前言 在开发中,我们经常遇到…...
设计模式 --- 状态模式
状态模式是一种行为型设计模式,允许对象在内部状态改变时动态改变其行为,使对象的行为看起来像是改变了。该模式通过将状态逻辑拆分为独立类,消除复杂的条件分支语句,提升代码的可维护性和扩展性。 状态模式的…...
Java多态课堂练习题
Java多态课堂练习题 题目:动物乐园的多态展示 背景设定: 设计一个动物乐园程序,展示不同类型动物的行为特点,要求使用多态特性实现。 1. 基础类设计(已给出部分代码) // 基类:动物 abstract…...
SAP系统中的借货
问题:什么是借贷? 解答:记账符号反映的是各种经济业务数量的增加和减少。 二:怎么区分借贷增减? 解答:“借”和“贷”何时为增加、何时为减少,必须结合账户的具体性质才能准确说明…...
深入剖析Go Channel:从底层原理到高阶避坑指南|Go语言进阶(5)
文章目录 引言channel的底层数据结构channel操作原理发送操作(ch <- data)接收操作(<-ch) 常见陷阱及避坑指南1. 死锁问题2. 关闭channel的错误方式3. 内存泄漏4. nil channel特性5. 性能考量 最佳实践总结 引言 Channel是Go语言实现CSP并发模型的核心机制,提…...
OpenCV 图形API(31)图像滤波-----3x3 腐蚀操作函数erode3x3()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 使用3x3矩形结构元素腐蚀图像。 该函数通过使用中心作为锚点的3x3矩形结构元素来腐蚀源图像。腐蚀操作可以应用多次(迭代࿰…...
5.5 GitHub数据秒级分析核心揭秘:三层提示工程架构设计解析
GitHub Sentinel Agent 分析报告功能设计与实现 关键词:GitHub 数据分析, 提示工程设计, Pull Request 分析, Issues 跟踪, 竞品对比 项目进展报告生成功能设计 报告生成模块是 GitHub Sentinel 的核心功能,通过三层嵌套式提示工程架构实现深度分析: #mermaid-svg-vdHRUan…...
【Java学习笔记】Java初级阶段代码规范
Java 初级阶段代码规范 1. 类、方法的注释,要以 javadoc 的方式来写。 2. 非 Java Doc 的注释,往往是给代码的维护者看的,着重告读者为什么这样写,如何修改,注重什么问题等 3. 使用 tab 操作,实现缩进&am…...
AI Agent开发大全第二十八课-MCP实现本地命令调用怎么做的?
开篇 MCP很强大,Client端一旦实现了稳定的连接和执行流程后任Server端随意改动都可兼容,这就是热插拨功能。 如果我们仅仅满足于MCP查点网上资料、读点图片即文字型的功能肯定是不能充分发挥MCP的强大之处的,正应了Google以及Anthropic最近的研究报告上说的:不要再在chat…...
macOS 上使用 Homebrew 安装和配置 frp 客户端
macOS 上使用 Homebrew 安装和配置 frp 客户端 (frpc) 指南 frp (Fast Reverse Proxy) 是一款高性能的反向代理应用,常用于内网穿透。本文将介绍在 macOS 上使用 Homebrew 安装 frpc,并进行配置和管理。 一、安装 frpc 使用 Homebrew 安装(…...
为 docker 拉取镜像配置代理
为 Docker 配置代理,有 两个层面 的操作:(1) Docker 守护进程(用于拉取镜像等操作),(2) Docker 容器内部(容器内应用的网络流量)。 我们这篇文章着重于前者,以下是详细步骤ÿ…...
A2A协议实现详解及示例
A2A协议概述 A2A (Agent2Agent) 是Google推出的一个开放协议,旨在使AI智能体能够安全地相互通信和协作。该协议打破了孤立智能体系统之间的壁垒,实现了复杂的跨应用自动化。[1] A2A协议的核心目标是让不同的AI代理能够相互通信、安全地交换信息以及在各…...
TDengine 语言连接器(Node.js)
简介 tdengine/websocket 是 TDengine 的官方 Node.js 语言连接器。Node.js 开发人员可以通过它开发存取 TDengine 数据库的应用软件。 Node.js 连接器源码托管在 GitHub。 Node.js 版本兼容性 支持 Node.js 14 及以上版本。 支持的平台 支持所有能运行 Node.js 的平台。 …...
ESP-IDF 开发框架:探索ESP32的强大底层世界
文章总结(帮你们节约时间) 介绍了ESP-IDF作为乐鑫ESP32系列芯片的官方开发框架。对比了Arduino、MicroPython和ESP-IDF三种ESP32开发方式的优缺点。详细讲解了ESP-IDF的核心特性和多层架构设计。展示了ESP-IDF的开发流程和应用场景。 你是否曾经好奇过…...
活动图与流程图的区别与联系:深入理解两种建模工具
目录 前言1. 活动图概述1.1 活动图的定义1.2 活动图的基本构成要素1.3 活动图的应用场景 2. 流程图概述2.1 流程图的定义2.2 流程图的基本构成要素2.3 流程图的应用场景 3. 活动图与流程图的联系4. 活动图与流程图的区别4.1 所属体系不同4.2 表达能力差异4.3 使用目的与语境4.4…...
如何在 Java 中对 PDF 文件进行数字签名(教程)
Java 本身并不原生支持 PDF 文件,因此若要对 PDF 进行数字签名,您需要使用一些专用的软件。本教程将演示如何使用 JPedal PDF 库来对 PDF 文件进行数字签名。 步骤: • 下载 JPedal 并将 Jar 文件添加到项目中 • 创建一个 PKCS#12 密…...
图片文本识别OCR+DeepSeekapi实现提取图片关键信息
用到的技术: 通过腾讯OCR文字识别,deepseek的api实现 目录 需求分析: 文字识别(OCR)具体实现步骤 起步工作 代码编写 deepseek整合消息,返回文本关键信息 起步工作 编写工具类 具体调用实现 具体…...
go 通过汇编分析函数传参与返回值机制
文章目录 概要一、前置知识二、汇编分析2.1、示例2.2、汇编2.2.1、 寄存器传值的汇编2.2.2、 栈内存传值的汇编 三、拓展3.1 了解go中的Duff’s Device3.2 go tool compile3.2 call 0x46dc70 & call 0x46dfda 概要 在上一篇文章中,我们研究了go函数调用时的栈布…...
解决Ubuntu Desktop 24.04 VMware中安装后不能全屏显示,只能居中的问题
Ubuntu Desktop 24.04 VMware中安装后不能全屏显示,只能居中。 sudo apt-get install open-vm-tools sudo apt-get install open-vm*...
