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

       在上一篇博客中,重点介绍了如何通过sparksql来执行查询操作,虽然可以实现对创建的DateFrame进行操作,但是语法和普通的关系型数据库的SQL操作存在差异。不容易记住,所以这一篇博客中,介绍如何通过普通SQL来操作。

     通过SQL语句来调用

           创建表

                      df.registerTempTable("tabName");---->创建的是临时表

                      df.saveAsTable("tabName");---------->创建的是永久表

                      永久表和持久表的区别就在于:临时表在会话结束时,会被删除;而持久表会在会话结束后被保存下来。

           查询操作

                       我们首先创建一个DateFrame,进行演示。

                       >import org.apache.spark.sql.SQLContext

                       >val ssc=new SQLContext(sc);

                       >val df=sc.makeRDD(List((1,"a","bj"),(2,"b","sh"),(3,"c","gz"),(4,"d","bj"),(5,"e","gz"))).toDF("id","name","addr");

                       >df.registerTempTable("stu");----->注册临时表

                1)查询

                      

                2)带条件查询

                     

                3)排序查询

                    

                      注意:这里和SQL类似,默认的情况下是升序排序。

                4)分组查询

                      

                5)连接查询

                         这里我们创建新的DataFrame来进行操作。

                         >import org.apache.spark.sql.SQLContext

                         >val ssc=new SQLContext(sc);

                         >val dept=sc.parallelize(List((100,"财务部"),(200,"研发部"))).toDF("deptid","deptname")

                         >val emp=sc.parallelize(List((1,100,"张财务"),(2,100,"李会计"),(3,300,"王艳发"))).toDF("id","did","name")

                         >dept.registerTempTable("deptTab");

                          >emp.registerTempTable("empTab");

                          >sc.sql("select deptname,name from deptTab inner join empTab on deptTab.deptid=empTab.did").show()

                         

                        这里演示的是内连接,左外连接和右外连接可自行调试。

                6)执行运算

                         >import org.apache.spark.sql.SQLContext

                         >val ssc=new SQLContext(sc);

                         >val df = sc.makeRDD(List(1,2,3,4,5)).toDF("num");

                         >df.registerTempTable("tabx")

                         >ssc.sql("select num*10 from tabx").show()

                  7)分页查询 

                                  >import org.apache.spark.sql.SQLContext

                                 >val ssc=new SQLContext(sc);

                                 >val df = sc.makeRDD(List(1,2,3,4,5)).toDF("num");

                                 >df.registerTempTable("tabx")

                                 >ssc.sql("select * from tabx limit 3").show();

                  8)查看表

                               >ssc.sql("show tables").show

                  9)  类似hive方式的操作

                               >val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)

                               >hiveContext.sql("create table if not exists zzz (key int, value string) row format delimited fields terminated by '|'")
                               >hiveContext.sql("load data local inpath 'file:///home/software/hdata.txt' into table zzz")

                               >hiveContext.sql("select key,value from zzz").show

                   10)Scala实现sparkSql操作

                                    val conf=new SparkConf().setMaster("spark://IP地址:7077").setAppName("操作名称");

                                    val sc=new SparkContext(conf);

                                     val sqlContext=new SQLContext(sc)

                                     val rdd=sc.makeRDD(List((1,"zhang"),(2,"li"),(3,"wang")))

                                    import sqlContext.implicits._

                                    val df=rdd.toDF("id","name")

                                    df.registerTempTable("tabx")

                                    val df2=sqlContext.sql("select * from tabx order by name");

                                    val rdd2=df2.toJavaRDD;---->schemaRDD转换成JavaRDD

                                   rdd2.saveAsTextFile("file:///home/software/result")----->将结果输出到linux的本地目录

                                   

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VogtZhao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值