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

 前言

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

       通过方法查询

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

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

              1)基础查询:

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

                   具体效果为:

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

               2)带条件的查询

                   查询id为3的信息

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

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

                3)排序查询

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

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

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

                     举个例子:

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

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

                    4)分组查询

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

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

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

                          groupBy("列名",.。。。。).sum(列名)求和

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

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

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

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

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

                    5) 连接查询

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

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

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

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

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

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

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

                      >dept.join(emp,$"deptid"===$"did","right")----->右外连接

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

                6)执行运算

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

               7)使用列表

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

                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

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

                 9)其他

                  df.count//获取记录总数

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

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

                 df.collect//获取当前df对象中的所有数据为一个Array 其实就是调用了df对象对应的底层的rddcollect方法