Apache SparkSQL 两种查询风格:DSL与SQL

本文介绍如何使用SparkSQL的两种查询风格:DSL和SQL,通过实例展示如何读取数据、筛选、分组及统计等操作,适用于大数据处理场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SparkSQL两种查询风格DSL与SQL

准备数据

person.txt文件内容:

1 zhangsan 20
2 lisi 29
3 wangwu 25
4 zhaoliu 30
5 tianqi 35
6 kobe 40

读取文件并转换为DataFrame或DataSet

val lineRDD= sc.textFile("hdfs://hadoop01:8020/person.txt").map(_.split(" "))
case class Person(id:Int, name:String, age:Int)
val personRDD = lineRDD.map(x => Person(x(0).toInt, x(1), x(2).toInt))
val personDF = personRDD.toDF
personDF.show
//val personDS = personRDD.toDS
//personDS.show 

在这里插入图片描述

DSL风格

SparkSQL提供了一个领域特定语言(DSL)以方便操作结构化数据

1.查看name字段的数据

personDF.select(personDF.col("name")).show

在这里插入图片描述

personDF.select(personDF("name")).show

在这里插入图片描述

personDF.select(col("name")).show

在这里插入图片描述

personDF.select("name").show

在这里插入图片描述

2.查看 name 和age字段数据

personDF.select("name", "age").show

在这里插入图片描述

3.查询所有的name和age,并将age+1

personDF.select(personDF.col("name"), personDF.col("age") + 1).show

在这里插入图片描述

personDF.select(personDF("name"), personDF("age") + 1).show

在这里插入图片描述

personDF.select(col("name"), col("age") + 1).show

在这里插入图片描述

personDF.select("name","age").show

在这里插入图片描述
注意:下面这行代码的语法是错误的

personDF.select("name", "age"+1).show 

这行的语法才是正确的:
$当前缀相当于把它查询出来后,赋予了变量的能力。
只要有一个字段使用了$作为前缀,其它字段也都要使用$作为前缀

personDF.select($"name",$"age",$"age"+1).show

在这里插入图片描述

4.过滤age大于等于25的,使用filter方法过滤

personDF.filter(col("age") >= 25).show

在这里插入图片描述

personDF.filter($"age" >=25).show

在这里插入图片描述

5.统计年龄大于30的人数

personDF.filter(col("age")>30).count()

在这里插入图片描述

personDF.filter($"age" >30).count()

在这里插入图片描述

6.按年龄进行分组并统计相同年龄的人数

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

在这里插入图片描述

SQL风格

DataFrame的一个强大之处就是我们可以将它看作是一个关系型数据表,然后可以通过在程序中使用spark.sql() 来执行SQL查询,结果将作为一个DataFrame返回
如果想使用SQL风格的语法,需要将DataFrame注册成表,
(注册成表的另一种说法是创建为视图View)

采用如下的方式:

personDF.createOrReplaceTempView("t_person")
spark.sql("select * from t_person").show

在这里插入图片描述

1.显示表的描述信息

spark.sql("desc t_person").show

在这里插入图片描述

2.查询年龄最大的前两名

spark.sql("select * from t_person order by age desc limit 2").show

在这里插入图片描述

3.查询年龄大于30的人的信息

spark.sql("select * from t_person where age > 30 ").show

在这里插入图片描述

4.使用SQL风格完成DSL中的需求

spark.sql("select name, age + 1 from t_person").show

在这里插入图片描述

spark.sql("select name, age from t_person where age > 25").show

在这里插入图片描述

spark.sql("select count(age) from t_person where age > 30").show

在这里插入图片描述

spark.sql("select age, count(age) from t_person group by age").show

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值