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

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 成员函数相同但每行数据类型不同。

      http://www.dtcms.com/a/133291.html

      相关文章:

    1. Java 设计模式:组合模式详解
    2. 体系结构论文(六十七):A Machine-Learning-Guided Framework for Fault-Tolerant DNNs
    3. GpuGeek:重构AI算力基础设施,赋能产业智能升级
    4. 大数据面试问答-批处理性能优化
    5. 快速排序(非递归版本)
    6. 【3D文件】可爱小鹿3D建模,3D打印文件
    7. 五大生产模式(MTS、MTO、ATO、ETO、CTO)的差异
    8. AIoT 智变浪潮演讲实录 | 刘浩然:让硬件会思考:边缘大模型网关助力硬件智能革新
    9. 001 蓝桥杯嵌入式赛道备赛——基础
    10. [特殊字符]飞牛相册测评:智能相册界的宝藏还是鸡肋?
    11. Coze 和 n8n 的详细介绍及多维度对比分析,涵盖功能、架构、适用场景、成本等关键指标
    12. 鸿蒙NEXT开发Emitter工具类(ArkTs)
    13. 操作系统学习笔记——[特殊字符]超详细 | 如何唤醒被阻塞的 socket 线程?线程阻塞原理、线程池、fork/vfork彻底讲明白!
    14. 【PCIE736-0】基于 PCIE X16 总线架构的 4 路 QSFP28 100G 光纤通道处理平台
    15. DDoS攻防实战指南——解析企业级防护五大解决方案
    16. leetcode03 -- 武汉旅游查询系统
    17. 关于setTimeout输出
    18. 面试篇 - Transformer模型中的位置编码
    19. Windows 操作系统 - Windows 10 磁盘管理无法为 C 盘选择扩展卷
    20. Java单例模式:实现全局唯一对象的艺术
    21. Linux Kernel 3
    22. LDAP渗透测试
    23. java 线程池:IO密集型的任务(CPU核数 * 2 + 1),为什么这么设置,计算密集型任务( CPU核数+1 ),为什么这么设置
    24. 火车头采集动态加载Ajax数据(无分页瀑布流网站)
    25. Python numpy 与pandas
    26. Apache Commons CLI 入门教程:轻松解析命令行参数
    27. 运维面试题(十三)
    28. linux一次启动多个jar包
    29. 一键解锁Landsat 9地表温度计算!ENVI与ArcGIS Pro全流程详解(无需NASA大气校正)
    30. 解决前端使用Axios时的跨域问题