关于SparkSQL那些事(二)—-sparksql基础语法(上)

  • Post author:
  • Post category:其他


前言

在上一篇博客中,重点介绍了sparkSQL的由来,以及sparkSQL读取不同的数据源进行数据。我们知道,sparkSQL通过获取数据源中的数据形成SchemaRDD。在这篇博客中,我们就通过相应的查询命令读取数据。

通过方法查询

创建一个DataFrame对象,进行具体演示:

1)基础查询:

>tab1.select(“id”,”name”).show();—->select参数列表中的参数为列名

具体效果为:

2)带条件的查询

查询id为3的信息

注意:这里在进行相等比较时,必须用三个”=”号,其中select函数中的”*”表示显示所有的列。

3)排序查询

orderBy/sort($”列名”)升序排序

orderBy/sort($”列名”.desc)降序排序

orderBy/sort($”列1″,$”列2″.desc)按两列排序

举个例子:

按照id进行升序排序,按照age进行降序排序

4)分组查询

groupBy(“列名”,。。。。).max(列名)求最大值

groupBy(“列名”,。。。。).min(列名)求最小值

groupBy(“列名”,。。。。).avg(列名)求平均值

groupBy(“列名”,.。。。。).sum(列名)求和

groupBy(“列名”,。。。。).count()求个数

groupBy(“列名”,。。。。).agg可以将多个方法进行聚合使用

在这里创建新的DataFrame进行演示。

5) 连接查询

创建新的DataFrame对象进行演示。

>dept.join(emp,$”deptid”===$”did”).show—->内连接

>dept.join(emp,$”deptid”===$”did”).show—>左外连接

左向外联接的结果集包括  LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

>dept.join(emp,$”deptid”===$”did”,”right”)—–>右外连接

6)执行运算

7)使用列表

8)使用结构体

{“name”:”陈晨”,”address”:{“city”:”西安”,”street”:”南二环甲字1号”}}

{“name”:”娜娜”,”address”:{“city”:”西安”,”street”:”南二环甲字2号”}}

>import org.apache.spark.sql.SQLContext

>val ssc=new SqlContext(sc)

>val df=ssc.read.json(“/home/software/users.json”)

>val result=df.select(“name”,”address.street”).show

9)其他

df.count//获取记录总数

val row=df.first()//获取第一条记录

val value=row.getString(1)//获取当前行的第一列的数据

df.collect//

获取当前


df


对象中的所有数据为一个


Array


其实就是调用了


df


对象对应的底层的


rdd





collect


方法



版权声明:本文为inUnderstanding原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。