sql编程基础pdfSQL的ApI允许直接使用而不用必须去注册临时表

2023-11-29    分类: 网站建设

内容

基本介绍

模型和模型是 SQL 提供的两个编程抽象。核心编程主要是使用和模型进行编程,以及它们之间的关系和转换。

在 Core 中,如果要执行应用程序,首先需要构建上下文环境对象。 SQL其实可以理解为Core的一种封装。不仅封装了模型,还封装了上下文环境对象。

旧版本提供了两个SQL查询起点:

是最新的SQL查询的起点,本质上是and的组合,所以ApI可以在on上使用,也可以在on上使用。内部封装了,所以计算实际上是由.

SQL ApI 允许直接使用,无需注册临时表或生成 SQL 表达式。 ApI 既有操作又有操作。

创建

在SQL中,是创建和执行SQL的入口。共有三种创建方式:

(1)由

的数据源创建

①进入

[xzc@hadoop102 spark-local]$ bin/spark-shell

②查看支持文件创建的数据源格式

scala> spark.read.

③在

的bin/data目录下创建user.json文件

{"username": "zhangsan","age":20}
{"username": "lisi", "age":30}
{"username": "wangwu", "age":40}

④读取json文件创建

scala> val df = spark.read.json("data/user.json")

⑤显示结果

scala> df.show

(2)从RDD转换

在IDEA中开发程序时,如果需要RDD和DF或DS的互操作,需要引入如下代码:

import spark.implicits._ 

这里不是包名in,而是创建对象的变量名,所以必须先创建对象再导入。这里的对象不能用var声明,因为只支持引入val修饰的对象。在-中,不需要导入,这个操作是自动完成的。

①在

的bin/data目录下创建id.txt文件

②读取txt文件

scala> val idRDD = sc.textFile("data/id.txt") 

③转换并显示结果

scala> idRDD.toDF("id").show 

注意:在实际开发中,RDD一般转换为

scala> case class User(name:String, age:Int) 
scala> sc.makeRDD(List(("zhangsan",30), ("lisi",40))).map(t=>User(t._1, t._2)).toDF.show 

(3)从 Hive 查询返回

Hive 是 SQL 引擎。 SQL 可以在有或没有 Hive 支持的情况下编译。包含 Hive 支持的 SQL 可以支持 Hive 表访问、UDF(用户自定义函数)和 Hive 查询语言(/HQL)等。需要强调的是,如果要在 SQL 中包含 Hive 库,则不需要提前安装Hive。要将 SQL 连接到已部署的 Hive,您必须将 hive-site.xml 复制到配置文件目录 ($/conf)。即使没有部署Hive,SQL仍然可以运行。

下载hive-site.xml文件,需要根据自己的配置修改个别内容

注意:如果你还没有部署Hivesql编程基础 pdf,SQL会在当前工作目录下创建自己的Hive元数据仓库,称为它。此外,如果您尝试使用 (not) 语句创建表,这些表将被放置在您默认文件系统的 /user/hive/ 目录中(如果您有一个完善的 hdfs-site.xml ,则默认文件系统为HDFS,否则为本地文件系统)。

- Hive 默认支持;代码中默认不支持,需要手动指定(加个参数即可)。

1) 嵌入式 HIVE

如果你使用内嵌的Hive,你什么都不用做,直接使用即可。

存储Hive的元数据,默认仓库地址:$/-

①展示

scala> spark.sql("show tables").show 

②创建表格

scala> spark.sql("create table aa(id int)") 

③将本地数据加载到表格中并显示

scala> spark.sql("load data local inpath 'data/id.txt' into table aa") 
scala> spark.sql("select * from aa").show 

注意:在实际使用中,几乎没有人会使用内置的Hive

2)外的HIVE

如果要连接到外部部署的 Hive,则需要执行以下步骤:

是强类型数据集合,需要提供对应的类型信息。

创建

有两种创建方式:

(1) with

①创建示例类

scala> case class person(name: String, age: Long) 

②向表格中添加数据并显示

scala> val caseClassDS = Seq(person("zhangsan",2)).toDS() 
scala> caseClassDS.show 

(2)使用基本类型的序列创建

①创建

scala> val ds = Seq(1,2,3,4,5).toDS 

②显示数据

scala> ds.show 

注意:在实际使用中,很少用于将序列转换成,更多的是通过RDD获取

将 RDD 转换为

包含case类的RDD可以自动转换为case类定义的结构,通过反射将case类属性转换为表的列名。 Case 类可以包含复杂的结构,例如 Seq 或 Seq。

scala> case class User(name:String, age:Int) 
scala> sc.makeRDD(List(("zhangsan",30), ("lisi",49))).map(t=>User(t._1, t._2)).toDS 

转换为RDD

其实也是对RDD的封装,所以可以直接获取内部RDD

scala> case class User(name:String, age:Int) 
scala> sc.makeRDD(List(("zhangsan",30), ("lisi",49))).map(t=>User(t._1, t._2)).toDS 
scala> val rdd = res11.rdd 
scala> rdd.collect 

和转化

实际上是一个特例,所以它们可以相互转换。

(1)被转换为

scala> case class User(name:String, age:Int)  
scala> val df = sc.makeRDD(List(("zhangsan",30), ("lisi",49))).toDF("name","age") 
scala> val ds = df.as[User] 

(2) 转换为

scala> val ds = df.as[User] 
scala> val df = ds.toDF 

RDD与RDD的关系

In 为我们提供了两个新的抽象,即 and。它们和RDD有什么区别?首先从版本生成的角度:

如果给这三个数据结构赋予相同的数据sql编程基础 pdf,分别计算后,都会给出相同的结果。区别在于它们的执行效率和执行方法。在以后的版本中,可能会逐渐取代RDD,成为唯一的ApI接口。

三者的共同点

(1)RDD,都是平台下的分布式弹性数据集,为处理超大数据提供了便利;

(2)三者都有惰性机制,创建转换的时候,比如map方法,不会立即执行,只有遇到比如,三者才会开始遍历操作;

(3)三者有很多常用的功能,比如,排序等;

(4)很多操作都需要这个包:.._(创建对象后尝试直接导入)

(5)三者会根据内存情况自动缓存操作,这样即使数据量很大也不必担心内存溢出

(6)三个都有

的概念

(7)和两者都可以使用模式匹配来获取每个字段的值和类型

三者的区别

(1)RDD

(2)

(3)

三者相互转换。

分享文章:sql编程基础pdfSQL的ApI允许直接使用而不用必须去注册临时表
标题路径:https://www.cdcxhl.com/news32/297482.html

成都网站建设公司_创新互联,为您提供标签优化动态网站网站收录软件开发移动网站建设外贸建站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

外贸网站建设