Spark SQL快速入门(进阶)(下)

简介: Spark SQL快速入门(进阶)(下)

8. 统计操作

groupBy()count()操作

计算所有年龄和年龄的数量:

teacherDF.groupBy("age").count().show()


image.png


0x03 执行 SQL 语句


SparkSession 提供了 SparkSession.sql() 方法,SQL 语句可以直接作为字符串传入 sql()方法中,具体可以学习相关的 SQL 知识。

首先需要将 DataFrame 注册为临时表才可以在该表上执行 SQL 语句:


teacherDF.createOrReplaceTempView("teacher")

查询身高在 170-190 之间的老师:


val sqlDF = spark.sql("SELECT name,height FROM teacher WHERE height >= 170 and height <= 190")
sqlDF.show()


image.png


如果在同一个应用的不同 session 会话中需要重用一个临时表,可以把它注册成为全局临时表全局临时表会一直存在并在所有会话中共享直到应用程序终止。

// 注册成为全局临时表
teacherDF.createGlobalTempView("GlobalTeacher")
// newSession()返回一个新的spark对象,引用全局临时表需要 global_temp 标识
spark.newSession().sql("SELECT name,height FROM global_temp.GlobalTeacher WHERE height >= 170 and height <= 190").show()


image.png


如果重复创建表的话会报错,提示表已经存在,此时就可以使用:createOrReplaceGlobalTempView()

teacherDF.createOrReplaceGlobalTempView("GlobalTeacher")


0x04 保存 DataFrame 为其他格式


1. 默认为Parquet格式

parquet 是 Spark SQL 读取的默认数据文件格式,我们把先前从 JSON 中读取的 DataFrame 保存为这种格式,只保存名称和身高两项数据:


teacherDF.select("name", "height").write.format("parquet").save("/home/hadoop-sny/datas/teacher.parquet")


/home/hadoop-sny/datas/teacher.parquet 文件夹被会被创建并存入名称和身高。另开一个终端,可以查看文件夹下的内容:


image.png


2. 保存为其他格式

此外,你也可以保存成一份json文件:

teacherDF.select("name", "height").write.format("json").save("/home/hadoop-sny/datas/teacher-test.json")


查看内容,如图:

image.png


3. 保存模式

保存操作可以选择使用多种存储模式: SaveMode , 它可以指定如何处理现有数据。比如当执行 Overwrite 时, 在写入新数据之前,原有的数据将被删除。

image.png


比如:使用overwrite方式以parquet形式写出去:

teacherDF.select("name", "height").write.format("json").mode("overwrite").save("/home/hadoop-sny/datas/teacher-test.json")


image.png


退出原本的目录,重新进入查看一下文件,生成的时间变了,因为重新生成了文件,并且覆盖了以前生成的文件,其他的模式也是类似的,此处不再反复截图。


0x05 支持多种数据源


1. 通用 load、save 函数

Spark SQL的默认数据源格式为 parquet 格式。当文件是 parquet 格式时,Spark SQL 可以直接在该文件上执行查询操作。

代码示例如下:

val usersDF = spark.read.load("路径/users.parquet")
usersDF.select("name", "age").write.save("namesAndAge.parquet")


2. 指定其他格式数据源

当数据源不是 parquet 文件却是内置格式的时候,使用指定简称(json, jdbc, orc, libsvm, csv, text)即可。同时还可以对 DataFrame 进行类型转换

代码示例如下:


val usersDF = spark.read.format("json").load("路径/users.json")
usersDF.select("name", "age").write.format("parquet").save("namesAndAges.parquet")


0xFF 总结


  1. 本文的前置教程课程为: Spark SQL快速入门(基础),关于Spark SQL的操作还有很多知识,此处仅仅是入门教程,有机会再写相应的教程。
  2. 关于RDD、DataFrame、DataSet的互相转换是非常重要的知识点,请留意我的博客,点赞、评论、关注,有时间分享给大家,谢谢!
相关文章
|
SQL JSON 分布式计算
Spark SQL架构及高级用法
Spark SQL基于Catalyst优化器与Tungsten引擎,提供高效的数据处理能力。其架构涵盖SQL解析、逻辑计划优化、物理计划生成及分布式执行,支持复杂数据类型、窗口函数与多样化聚合操作,结合自适应查询与代码生成技术,实现高性能大数据分析。
850 2
|
SQL 分布式计算 资源调度
Dataphin功能Tips系列(48)-如何根据Hive SQL/Spark SQL的任务优先级指定YARN资源队列
如何根据Hive SQL/Spark SQL的任务优先级指定YARN资源队列
530 4
|
SQL 分布式计算 Java
Spark SQL向量化执行引擎框架Gluten-Velox在AArch64使能和优化
本文摘自 Arm China的工程师顾煜祺关于“在 Arm 平台上使用 Native 算子库加速 Spark”的分享,主要内容包括以下四个部分: 1.技术背景 2.算子库构成 3.算子操作优化 4.未来工作
2275 0
|
SQL 安全 数据挖掘
牛客网刷题之SQL篇:非技术快速入门39T
这篇文章是关于牛客网上的SQL刷题教程,涵盖了基础的SQL运算符和多个实际的数据分析场景,旨在帮助非技术人员快速入门SQL。
1003 0
牛客网刷题之SQL篇:非技术快速入门39T
|
SQL JSON 分布式计算
【赵渝强老师】Spark SQL的数据模型:DataFrame
本文介绍了在Spark SQL中创建DataFrame的三种方法。首先,通过定义case class来创建表结构,然后将CSV文件读入RDD并关联Schema生成DataFrame。其次,使用StructType定义表结构,同样将CSV文件读入RDD并转换为Row对象后创建DataFrame。最后,直接加载带有格式的数据文件(如JSON),通过读取文件内容直接创建DataFrame。每种方法都包含详细的代码示例和解释。
508 0
|
SQL 分布式计算 大数据
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
729 0
|
人工智能 分布式计算 大数据
大数据≠大样本:基于Spark的特征降维实战(提升10倍训练效率)
本文探讨了大数据场景下降维的核心问题与解决方案,重点分析了“维度灾难”对模型性能的影响及特征冗余的陷阱。通过数学证明与实际案例,揭示高维空间中样本稀疏性问题,并提出基于Spark的分布式降维技术选型与优化策略。文章详细展示了PCA在亿级用户画像中的应用,包括数据准备、核心实现与效果评估,同时深入探讨了协方差矩阵计算与特征值分解的并行优化方法。此外,还介绍了动态维度调整、非线性特征处理及降维与其他AI技术的协同效应,为生产环境提供了最佳实践指南。最终总结出降维的本质与工程实践原则,展望未来发展方向。
705 0
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
1260 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
存储 分布式计算 Hadoop
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
793 79
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
474 0