SparkSQL -总结2- 中DSL风格和SQL风格的使用

准备工作:
读取文件并转换为DataFrame或DataSet

val lineRDD= sc.textFile("hdfs://192.168.1.101:9000/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.printSchema
personDF.show
val personDS = personRDD.toDS
personDS.printSchema
personDS.show 

DSL风格
SparkSQL提供了一个领域特定语言(DSL)以方便操作结构化数据。
也就是说直接使用DataFrame对象api 进行对RDD操作。

1.查看name字段的数据
返回column类型的各种方式

personDF.select($"name").show //很常用
personDF.select(col("name")).show   //也常用
personDF.select("name").show 	//常用
personDF.select(personDF.col("name")).show
personDF.select(personDF("name")).show

2、查询所有的name和age,并将age+1

personDF.select($"name",$"age",$"age"+1).show	//很常用
personDF.select(col("id"), col("name"), col("age") + 1).show	//也常用
personDF.select(personDF.col("id"), personDF.col("name"), personDF.col("age") + 1).show
personDF.select(personDF("id"), personDF("name"), personDF("age") + 1).show

3、过滤age大于等于25的,使用filter方法过滤

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

4、统计年龄大于30的人数

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

5、按年龄进行分组并统计相同年龄的人数

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

SQL风格
DataFrame的一个强大之处就是我们可以将它看作是一个关系型数据表,然后可以通过在程序中使用spark.sql() 来执行SQL查询,结果将作为一个DataFrame返回。

也就是说最终sql语句本质还是对RDD操作。

如果想使用SQL风格的语法,需要将DataFrame注册成表,采用如下的方式:

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

1、显示表的描述信息

spark.sql("desc t_person").show

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

spark.sql("select * from t_person order by age desc limit 2").show
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值