SparkSQL 读写_Hive_SparkSQL 创建 Hive 表 | 学习笔记

简介: 快速学习 SparkSQL 读写_Hive_SparkSQL 创建 Hive 表

开发者学堂课程【大数据 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 岁,运行结果无误。

相关文章
|
4月前
|
SQL 存储 HIVE
Hive中的表是如何定义的?请解释表的结构和数据类型。
Hive中的表是如何定义的?请解释表的结构和数据类型。
89 0
|
3月前
|
SQL 缓存 关系型数据库
ClickHouse(19)ClickHouse集成Hive表引擎详细解析
Hive引擎允许对HDFS Hive表执行 `SELECT` 查询。目前它支持如下输入格式: -文本:只支持简单的标量列类型,除了 `Binary` - ORC:支持简单的标量列类型,除了`char`; 只支持 `array` 这样的复杂类型 - Parquet:支持所有简单标量列类型;只支持 `array` 这样的复杂类型
157 1
|
4月前
|
SQL 关系型数据库 MySQL
Hive 表注释乱码解决
Hive元数据在MySQL默认使用`latin1`字符集导致注释乱码。可通过修改MySQL配置文件`/etc/my.cnf`,在`[mysqld]`和末尾添加`character-set-server=utf8`等设置,重启MySQL。然后在Hive数据库中调整表字段、分区字段、索引注释的字符集。注意,这仅对新表生效。测试创建带注释的Hive表,问题解决。
|
4月前
|
SQL HIVE
Hive表删除数据不支持使用Delete From...
Hive表删除数据不支持使用Delete From...
136 0
|
4月前
|
SQL 存储 分布式计算
【Hive】hive内部表和外部表的区别
【4月更文挑战第14天】【Hive】hive内部表和外部表的区别
|
4月前
|
SQL 存储 分布式计算
Hive【基础 01】核心概念+体系架构+数据类型+内容格式+存储格式+内外部表(部分图片来源于网络)
【4月更文挑战第6天】Hive【基础 01】核心概念+体系架构+数据类型+内容格式+存储格式+内外部表(部分图片来源于网络)
105 1
|
4月前
|
SQL 数据库 HIVE
Hive【基础知识 05】常用DDL操作(数据库操作+创建表+修改表+清空删除表+其他命令)
【4月更文挑战第8天】Hive【基础知识 05】常用DDL操作(数据库操作+创建表+修改表+清空删除表+其他命令)
75 0
|
4月前
|
SQL 消息中间件 Kafka
Flink部署问题之hive表没有数据如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
4月前
|
SQL JSON 算法
hive学习笔记
hive学习笔记
|
4月前
|
SQL 分布式计算 关系型数据库
Sqoop数据导入到Hive表的最佳实践
Sqoop数据导入到Hive表的最佳实践