当前位置: 首页 > article >正文

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地址可通过以下方法实现&#xff0c;需结合网络状态管理和API调用&#xff1a; 一、权限配置 在AndroidManifest.xml中添加必要权限&#xff1a; <uses-permission android:name"android.permission.ACCESS_WIFI_STATE" /> <…...

      正则表达式使用知识(日常翻阅)

      正则表达式使用 一、字符匹配 1. 普通字符 描述&#xff1a;直接匹配字符本身。示例&#xff1a; abc 匹配字符串中的 “abc”。Hello 匹配字符串中的 “Hello”。 2. 特殊字符 .&#xff08;点号&#xff09;&#xff1a; 描述&#xff1a;匹配任意单个字符&#xff08;…...

      AI与无人驾驶汽车:如何通过机器学习提升自动驾驶系统的安全性?

      引言 想象一下&#xff0c;在高速公路上&#xff0c;一辆无人驾驶汽车正平稳行驶。突然&#xff0c;前方的车辆紧急刹车&#xff0c;而旁边车道有一辆摩托车正快速接近。在这千钧一发的瞬间&#xff0c;自动驾驶系统迅速分析路况&#xff0c;判断最安全的避险方案&#xff0c;精…...

      第5篇:Linux程序访问控制FPGA端LEDR<三>

      Q&#xff1a;如何具体设计.c程序代码访问控制FPGA端外设&#xff1f; A&#xff1a;以控制DE1-SoC开发板的LEDR为例的Linux .C程序代码。头文件fcntl.h和sys/mman.h用于使用/dev/mem文件&#xff0c;以及mmap和munmap内核函数&#xff1b;address_map_arm.h指定了DE1-SoC_Com…...

      城市应急安防系统EasyCVR视频融合平台:如何实现多源视频资源高效汇聚与应急指挥协同

      一、方案背景 1&#xff09;项目背景 在当今数字化时代&#xff0c;随着信息技术的飞速发展&#xff0c;视频监控和应急指挥系统在公共安全、城市应急等领域的重要性日益凸显。尤其是在关键场所&#xff0c;高效的视频资源整合与传输能力对于应对突发公共事件、实现快速精准的…...

      主流程序员接单平台的分类整理与分析

      一、主流推荐平台 1.程序员客栈 特点&#xff1a;国内知名度高&#xff0c;需求池模式自动匹配项目&#xff0c;项目经理介入协调争议&#xff0c;流程规范。 优势&#xff1a;适合新手到资深开发者&#xff0c;资金托管安全性高&#xff0c;交易纠纷处理专业。 不足&…...

      【笔记ing】AI大模型-03深度学习基础理论

      神经网络&#xff1a;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.神经网络是神经元的网络或回路&#xff0c;或者在现在意义上来说&#xff0c;是一个由人工神经元或节…...

      Hutool工具包中`copyProperties`和`toBean`的区别

      前言 在Java开发中&#xff0c;对象转换是一项常见且重要的操作。Hutool作为一个功能强大的Java工具包&#xff0c;提供了copyProperties和toBean这两个实用的方法来帮助我们进行对象转换。然而&#xff0c;很多开发者对这两个方法的区别和使用场景并不十分清楚。 一、Hutool…...

      高德地图 JS-SDK 实现教程

      高德地图 JS-SDK 实现教程&#xff1a;定位、地图选点、地址解析等 适用地点选择、地址显示、表单填写等场景&#xff0c;全面支持移动端、手机浏览器和 PC端环境 一、创建应用&Key 前端&#xff08;JS-SDK、地图组件&#xff09; 登陆 高德开放平台创建应用&#xff0c;…...

      07软件测试需求分析案例-修改用户信息

      修改用户信息是后台管理菜单的一个功能模块&#xff0c;只有admin才有修改权限。包括查询用户名进行显示用户相关信息&#xff0c;并且修改用户相关信息的功能。 1.1 通读文档 通读需求规格说明书是提取信息&#xff0c;提出问题&#xff0c;输出具有逻辑、规则、流程的业务…...

      分层对象模型:PO、DTO、VO、BO定义区别与使用场景

      目录 前言 PO&#xff08;持久化对象&#xff09; DTO&#xff08;数据传输对象&#xff09; VO&#xff08;视图对象&#xff09; BO&#xff08;业务对象&#xff09; 关键区别总结 典型应用场景 为什么要分层设计 工具支持 前言 在开发中&#xff0c;我们经常遇到…...

      设计模式 --- 状态模式

      状态模式​​是一种​​行为型设计模式​​&#xff0c;允许对象在内部状态改变时动态改变其行为​​&#xff0c;使对象的行为看起来像是改变了。该模式通过将状态逻辑拆分为独立类​​&#xff0c;消除复杂的条件分支语句&#xff0c;提升代码的可维护性和扩展性。 状态模式的…...

      Java多态课堂练习题

      Java多态课堂练习题 题目&#xff1a;动物乐园的多态展示 背景设定&#xff1a; 设计一个动物乐园程序&#xff0c;展示不同类型动物的行为特点&#xff0c;要求使用多态特性实现。 1. 基础类设计&#xff08;已给出部分代码&#xff09; // 基类&#xff1a;动物 abstract…...

      SAP系统中的借货

      问题&#xff1a;什么是借贷&#xff1f; 解答&#xff1a;记账符号反映的是各种经济业务数量的增加和减少。 二&#xff1a;怎么区分借贷增减&#xff1f; 解答&#xff1a;“借”和“贷”何时为增加、何时为减少&#xff0c;必须结合账户的具体性质才能准确说明…...

      深入剖析Go Channel:从底层原理到高阶避坑指南|Go语言进阶(5)

      文章目录 引言channel的底层数据结构channel操作原理发送操作(ch <- data)接收操作(<-ch) 常见陷阱及避坑指南1. 死锁问题2. 关闭channel的错误方式3. 内存泄漏4. nil channel特性5. 性能考量 最佳实践总结 引言 Channel是Go语言实现CSP并发模型的核心机制&#xff0c;提…...

      OpenCV 图形API(31)图像滤波-----3x3 腐蚀操作函数erode3x3()

      操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 使用3x3矩形结构元素腐蚀图像。 该函数通过使用中心作为锚点的3x3矩形结构元素来腐蚀源图像。腐蚀操作可以应用多次&#xff08;迭代&#xff0…...

      5.5 GitHub数据秒级分析核心揭秘:三层提示工程架构设计解析

      GitHub Sentinel Agent 分析报告功能设计与实现 关键词:GitHub 数据分析, 提示工程设计, Pull Request 分析, Issues 跟踪, 竞品对比 项目进展报告生成功能设计 报告生成模块是 GitHub Sentinel 的核心功能,通过三层嵌套式提示工程架构实现深度分析: #mermaid-svg-vdHRUan…...

      【Java学习笔记】Java初级阶段代码规范

      Java 初级阶段代码规范 1. 类、方法的注释&#xff0c;要以 javadoc 的方式来写。 2. 非 Java Doc 的注释&#xff0c;往往是给代码的维护者看的&#xff0c;着重告读者为什么这样写&#xff0c;如何修改&#xff0c;注重什么问题等 3. 使用 tab 操作&#xff0c;实现缩进&am…...

      AI Agent开发大全第二十八课-MCP实现本地命令调用怎么做的?

      开篇 MCP很强大,Client端一旦实现了稳定的连接和执行流程后任Server端随意改动都可兼容,这就是热插拨功能。 如果我们仅仅满足于MCP查点网上资料、读点图片即文字型的功能肯定是不能充分发挥MCP的强大之处的,正应了Google以及Anthropic最近的研究报告上说的:不要再在chat…...

      macOS 上使用 Homebrew 安装和配置 frp 客户端

      macOS 上使用 Homebrew 安装和配置 frp 客户端 (frpc) 指南 frp (Fast Reverse Proxy) 是一款高性能的反向代理应用&#xff0c;常用于内网穿透。本文将介绍在 macOS 上使用 Homebrew 安装 frpc&#xff0c;并进行配置和管理。 一、安装 frpc 使用 Homebrew 安装&#xff08;…...

      为 docker 拉取镜像配置代理

      为 Docker 配置代理&#xff0c;有 两个层面 的操作&#xff1a;(1) Docker 守护进程&#xff08;用于拉取镜像等操作&#xff09;&#xff0c;(2) Docker 容器内部&#xff08;容器内应用的网络流量&#xff09;。 我们这篇文章着重于前者&#xff0c;以下是详细步骤&#xff…...

      A2A协议实现详解及示例

      A2A协议概述 A2A (Agent2Agent) 是Google推出的一个开放协议&#xff0c;旨在使AI智能体能够安全地相互通信和协作。该协议打破了孤立智能体系统之间的壁垒&#xff0c;实现了复杂的跨应用自动化。[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的强大底层世界

      文章总结&#xff08;帮你们节约时间&#xff09; 介绍了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 文件&#xff0c;因此若要对 PDF 进行数字签名&#xff0c;您需要使用一些专用的软件。本教程将演示如何使用 JPedal PDF 库来对 PDF 文件进行数字签名。 步骤&#xff1a; • 下载 JPedal 并将 Jar 文件添加到项目中 • 创建一个 PKCS#12 密…...

      图片文本识别OCR+DeepSeekapi实现提取图片关键信息

      用到的技术&#xff1a; 通过腾讯OCR文字识别&#xff0c;deepseek的api实现 目录 需求分析&#xff1a; 文字识别&#xff08;OCR&#xff09;具体实现步骤 起步工作 代码编写 deepseek整合消息&#xff0c;返回文本关键信息 起步工作 编写工具类 具体调用实现 具体…...

      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 概要 在上一篇文章中&#xff0c;我们研究了go函数调用时的栈布…...

      解决Ubuntu Desktop 24.04 VMware中安装后不能全屏显示,只能居中的问题

      Ubuntu Desktop 24.04 VMware中安装后不能全屏显示&#xff0c;只能居中。 sudo apt-get install open-vm-tools sudo apt-get install open-vm*...