开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:SparkSQL 读写_Hive_SparkSQL 创建 Hive 表】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/690/detail/12061
SparkSQL 读写_Hive_SparkSQL 创建 Hive 表
内容介绍:
一、原始代码
二、实操
一、原始代码
上节课我们学习了如何使用 SparkSQL 查看 Hive 当中已存在的表。而我们经常会遇到需要使用 SparkSQL 创建 Hive 表的情形,本节课就来介绍如何使用 SparkSQL 创建 Hive 表。
val createTableStr=
"""
| CREATE EXTERNAL TABLE student
|(
| name STRING,
| age INT,
| gpa string
|)
| ROW FORMAT DELIMITED
| FIELDS TERMINATED BY '\t'
| LINES TERMINATED BY '\n'
| STORED AS TEXTFILE
| LOCATION '/dataset/hive'
""".stripMargin
spark.sql("CREATE DATABASE IF NOT EXISTS spark_integritionl") spark.sql("USE spark_integrition1")
spark.sql(create TableStr)
spark.sal("LOAD DATA INPATH '/dataset/studenttable10k’OVERWRITE INTO TABLE student")
spark.sal("select * from student limit").show()
在实际操作中,仅需要在以上代码的基础上作出修改即可运行。
二、实操
1、复制以上代码到文本编辑器中,对其进行修改,如数据库名称等内容
val createTableStr=
"""
| CREATE EXTERNAL TABLE student
|(
| name STRING,
| age INT,
| gpa string
|)
| ROW FORMAT DELIMITED
| FIELDS TERMINATED BY '\t'
| LINES TERMINATED BY '\n'
| STORED AS TEXTFILE
| LOCATION '/dataset/hive'
""".stripMargin
spark.sql("CREATE DATABASE IF NOT EXISTS spark03")
//如果不存在数据库,则创建一个 spark03 的数据库
spark.sql("USE spark03")
//使用新创建的数据库
spark.sql(create TableStr)
//该 SQL 实际上传入的是一个字符串,该字符串在上面的代码“val createTableStr=”进行了定义,而定义字符串时使用了""",而这种创建字符串的方式之前已经进行过学习,就不多做赘述。
接下来把 create TableStr 传入到 sql 方法当中,把它当做一条 sql 语句执行,执行该语句后即可加载数据到数据库的某一张表中。
spark.sal("LOAD DATA INPATH '/dataset/studenttable10k’OVERWRITE INTO TABLE student")
//LOAD DATA INPATH:加载数据到数据库的表中
//而该表无论是内部表和外部表都已经指定了其存在的位置,但是通过 LOAD DATA 命令会把 HDFS 上该位置的文件移动到该位置里,也就是该处会存在风险,有可能刚刚的文件已经移动到新创建的 Hive 表里了。因此,稍后还要再进行上传。
//OVERWRITE INTO TABLE student:指定 overwrite,若数据已经存在,直应对原始的数据进行覆盖掉。
spark.sal("select * from student limit 100").show()
//查询数据,并限制显示数据不超过 100 条。
2、拷贝代码到集群中运行
(1)拷贝除最后一句的其余命令
(2)进入集群,重新上传文件
hdfs dfs -put studenttab10lk /dataset/
//将文件 studenttab10lk 上传到 dataset 目录下
spark-shell --master local [6]
//重新进入 spark-shell 的命令窗口中,并指定 local 的线程数为 6,运行。
paste
//使用 paste 粘贴模式将拷贝的命令语句粘贴,点击回车,并点击 ctrl+D 运行代码,结果显示为 res0:
org.apache.spark.sql.Date
Frame = [ ]
spark.sql("select * from student limit 100)
//从 student 中进行相应的查询,查出 100 条数据,查询结果显示为
res1:org.apache.spark.sql.DateFrame = [name:string,ag
e:int ... ]more field
//注意:查出的 100 条数据放在了 DateFrame 中,而放在 DateFrame 即可以直接通过 res1(该 DateFrame 的变量名)进行相应的处理和操作。
如 res1=where( "age>50").show(),相当于先执行一条 sql 语句查出数据,再通过这种命令式的 API 去操作数据。运行该处理代码,发现运行结果显示的数据所有都大于 50 岁,运行结果无误。