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

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

0x00 教程内容


  1. 基础环境准备
  2. Spark SQL 基础编程操作
  3. 执行 SQL 语句
  4. 保存 DataFrame 为其他格式
  5. 支持多种数据源

本文的前置教程课程为: Spark SQL快速入门(基础)


0x01 基础环境准备


1. 启动 Spark-Shell
spark-shell



2. 准备数据
vi /home/hadoop-sny/datas/teacher.json


{"name":"shaonaiyi", "age":"30", "height":198}
{"name":"shaonaier", "age":"28", "height":174}
{"name":"shaonaisan", "age":"25", "height":178}
{"name":"shaonaisi", "age":"21", "height":183}
{"name":"shaonaiwu", "age":"32", "height":165}


3. 生成DataFrame

在 spark-shell 中输入如下代码:

import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().appName("PersonApp").getOrCreate()
import spark.implicits._
val teacherDF = spark.read.json("/home/hadoop-sny/datas/teacher.json")


0x02 Spark SQL 基础编程操作


1. show()
teacherDF.show()


show():显示所有的数据

show(n) :显示前n条数据

show(true): 字段最多显示20个字符,默认为true

show(false): 取消最多显示20个字符的限制

show(n, true):显示前n条并最多显示20个字符


image.png


字段最多显示20个字符的意思是,比如name字段,名称太长,超过了20个字符的话,会显示成 ...,如果不超过则不会。

2. printSchema()

打印数据表的 Schema信息(结构):

teacherDF.printSchema()


image.png


3. 获取指定字段的统计信息
teacherDF.describe("height").show() //其中,Count:记录条数,Mean:平均值,Stddev:样本标准差,Min:最小值,Max:最大值



image.png


4. 获取数据操作

collect():获取所有数据到数组

collectAsList():获取所有数据到List

teacherDF.collect()
teacherDF.collectAsList()


image.png


first(): 获取第一行记录;

head(n):获取前 n 行记录;

take(n): 获取前 n 行数据;

takeAsList(n): 获取前 n 行数据,并以 List 的形式展示。

PS:head与take的结果其实是一样的。


image.png


5. 查询操作

查询名称为 shaonaiyi 或 年龄是30岁的数据:

teacherDF.where("name = 'shaonaiyi' or age = 28").show()



image.png


展示所有的老师名:

teacherDF.select("name").show()


image.png


展示所有的老师名及身高:

teacherDF.select("name", "height").show()


image.png


6. 过滤操作

展示所有年龄为30岁的老师,打印老师的名称与身高:

teacherDF.filter(teacherDF("age").equalTo("30")).select("name", "height").show()


image.png


limit(n)方法获取指定的 DataFrame 的前 n 行记录,得到的是一个新转化生成的 DataFrame 对象。

teacherDF.limit(3).show()


image.png


7. 排序操作

排序操作有两种方法:orderBy()sort()

都是按指定字段排序,默认为升序

desc:降序

asc :升序

teacherDF.orderBy(teacherDF("height").desc).show(false)


image.png

相关文章
|
1月前
|
SQL JSON 分布式计算
【赵渝强老师】Spark SQL的数据模型:DataFrame
本文介绍了在Spark SQL中创建DataFrame的三种方法。首先,通过定义case class来创建表结构,然后将CSV文件读入RDD并关联Schema生成DataFrame。其次,使用StructType定义表结构,同样将CSV文件读入RDD并转换为Row对象后创建DataFrame。最后,直接加载带有格式的数据文件(如JSON),通过读取文件内容直接创建DataFrame。每种方法都包含详细的代码示例和解释。
|
2月前
|
SQL 安全 数据挖掘
牛客网刷题之SQL篇:非技术快速入门39T
这篇文章是关于牛客网上的SQL刷题教程,涵盖了基础的SQL运算符和多个实际的数据分析场景,旨在帮助非技术人员快速入门SQL。
122 0
牛客网刷题之SQL篇:非技术快速入门39T
|
2月前
|
SQL 分布式计算 大数据
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
70 0
|
2月前
|
SQL 分布式计算 算法
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
88 0
|
2月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
59 0
|
2月前
|
SQL 分布式计算 大数据
大数据-94 Spark 集群 SQL DataFrame & DataSet & RDD 创建与相互转换 SparkSQL
大数据-94 Spark 集群 SQL DataFrame & DataSet & RDD 创建与相互转换 SparkSQL
75 0
|
3月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
5月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
134 13
|
5月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
5月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
69 6
下一篇
DataWorks