spark的两种查询风格

两种查询风格
1、准备工作
读取文件并转换为DataFrame或DataSet

val lineRDD= sc.textFile(“hdfs://node01: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

1.2、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( " n a m e " , "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
1.3、SQL风格
DataFrame的一个强大之处就是我们可以将它看作是一个关系型数据表,然后可以通过在程序中使用spark.sql() 来执行SQL查询,结果将作为一个DataFrame返回
如果想使用SQL风格的语法,需要将DataFrame注册成表,采用如下的方式:
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

2.5. 总结
1.DataFrame和DataSet都可以通过RDD来进行创建
2.也可以通过读取普通文本创建--注意:直接读取没有完整的约束,需要通过RDD+Schema
3.通过josn/parquet会有完整的约束
4.不管是DataFrame还是DataSet都可以注册成表,之后就可以使用SQL进行查询了! 也可以使用DSL!

发布了238 篇原创文章 · 获赞 429 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/qq_45765882/article/details/105560669
今日推荐