开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:SparkSQL 读写_Hive_读取 Hive 表】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/690/detail/12060
SparkSQL 读写_Hive_读取 Hive 表
内容介绍:
一、相关命令
二、实操
三、误区
一、相关命令
要使用 SparkSQL 语句访问 Hive 表仅需要三个命令即可完成,如下:
scala> spark.sql("use spark integrition")
scala> val resultDF = spark.sql("select * from student limit 10") scala>resultDF.show()
值得注意的是,之前的课程中整合了 SparkSQL 和 Hive,但是这种整合只作用在集群当中,也就是说只有使用 SparkShell 或者 SparkSubmit 时候才能享受整合的便利。
换言之,对于写本地程序的场景,这种整合是无法使用的。因为我们之前学习过的整合,是把配置文件拷贝到 Spark 的对应的 conf 目录下,因此必须要在集群当中执行才能够享受这种整合的便利。
二、实操
1、开启 SparkShell
打开代码编辑窗口,输入 exit 退出 Hive,并清空之前的屏幕,进行代码编辑:
cd /export/servers/spark
//进入 spark
bin/spark-shell --master spark://node01:7077
//使用 bin/spark-shell 命令运行,并指定其运行位置为集群 node01:7077。
//但以上方式往往会导致卡顿,因此可以选择直接使用 local 的形式运行
bin/spark-shell --master local [6]
开启 spark-shell ,待运行正常后,可以发现其读取了很多 Hive 的 config。接下来直接进行 SparkSQL 查询。
2、查询命令
之前我们学习使用 SQL 查询时,应先把 DateFrame 或者 DateSite 注册为一张空白表。但是现在可以直接执行命令
scala> spark.sql("use spark01")
//使用之前创建的数据库,显示结果为 res0:org.apache.spark.sql.DateFrame = [ ]
scala> spark.sql("select * from student limit 10")
//从 student 中查询,且仅限制显示的数据量为 100 条,结果显示 res1:org.apache.spark.sql.DateFrame = [name:string,age:
int ... ]more field,
即创建了变量 res1,其类型为 DateFrame 。
scala>res1.show()
//进行相应的查看和显示,通过运行最终显示结果无误。
在使用体验上,比直接在 Hive 窗口里执行的速度要稍快一些,对于更大的数据量执行速度相对而言会更快。
三、误区
使用 scala> spark.sql("use spark01")命令写入 SQL 语句时,有人认为该语句在默认情况下不会立刻执行,因为有可能是 transfomation。
但这启示是一种不太准确的说法,与之相反,该语句(包括后面的命令语句)会立刻执行。
可以理解为只有通过 show 方法才能最终获取且显示数据,实际操作中不需要每执行一次 SQL 就执行一次 show 方法,而只有在需要获取数据的时执行一次 show 方法即可,且前面的 SQL 语句也会默认执行。