Column 对象_创建1 | 学习笔记

简介: 快速学习 Column 对象_创建1

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段Column 对象_创建1】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/690/detail/12078


Column 对象_创建1


数据操作的第一个专题 column 对象,是 sparkSQL 扩展当中一个非常重要的对象,在使用这些无类型的 API 的时候,就是弱类型 API 的时候,要通过列去操作这个链,列就是 column 对象,我们要通过 column 对象来去告诉 sparkSQL 如何操作链去操作哪一个列。

 

image.png

在 column 对象的这个专题当中,讲解两个知识点:

1、如何创建一个 column 对象。

2、要在说一说 column 对象当中都有什么操作

了解一下 column 对象的几种创建方式,并且,我们对前面的这个 column 对象的使用,也做一个总结,大家看到,其实这个 column 对象有好多种用法,每一种用法大概的含义和意思。

进入到笔记当中,大概有如下四种创建方式:单引号“ ’ ”、$、col 函数、 column 函数,都可以去创建 column 对象,还有可以通过 data set 来进行相应的创建。

接下来打开 idea,先去创建一个新的类:

创建完这个类以后,先去把我们的方法 test 创建出来,然后方法名叫做 correction。

package cn.itcast.spark.sql

Import org.junit.Test

class Column{

//1.创建 spark 对象

val spark = SparkSession.builder()

.master(master = “local[6]”)

.appName(name = “column“)

.getorCreat()//得到一个 Column 对象

Import spark.implicits._//使用toDS(),要导入隐式转换才能使用

@Test

def creation(): Unit - {

val ds: Dataset[Persom]  = Seq(Person(“zhangsan”,15),

person(“lisi”:,10)).toDS()

val df: DataFrame =  Seq((“zhangsan”,15),

(“lisi”:,10)).toDF(colName =”name”.”age”)

val ds=Seq(Person(“zhangsan”,15),person(“lisi”:,10)).

toDS()//创建数据集,使用 val ds,用 Seq 实现,创建完之后,还不能直接创建 dataset。

//2. ‘ 必须导入这个 spark 的隐式转换才能使用 str.intern()

val column:  Symbol = ‘name

//用 val 获取一个 column 对象,如果想看到它的类型的话,你就可以直接补全一下,会发现,这其实并不是一个 column 对象,这是一个 symbol ,Symbol 可以理解为是字符串,Java 基础里讲过就是假如说一个 str 对象在调用 intern(),这个对象 str.intern()就固定下来了,然后这个对象就会被放到这个字符串里,那么这个 symbol 对象,也是一样的,,假如说第一次创建一个 symbol,然后再创建一个 symbol,那这两个 symbol,无论怎么去进行判断,它们都是相等的,用两个等号来判断一下,是相等的,直接对比它的内存地址也是相等的,这完全就是一个对象,是会被复用的,那这就是 symbol,其实就是字符串的一种,只不过它的类型叫做 symbol 在这个 str 当中,也是一个非常重要的一个知识点。

重点是这个 symbol 对象怎么就能当作 column 使用?

在这个 symbol 对象当中,我们输入为.asc,这个方法是 column 对象(column.scala)的方法,是怎么能调用 column 对象?

这个 symbol 对象,最后会被隐式转换为 column 对象,那么如果这样的话,进到我们这个 SQLImplicits 当中去探究一下这个原理,就搜索 symbol 对象,发现当一个 symbol 对象接收进来的时候,它是一个隐式转换,转换成一个 column name,那么这个 column name,又是一个 column对象给了 name,这就是我们的这个 symbol对象。

image.png

//3. $ 必须导入这个 spark 的隐式转换才能使用

val column1:  ColumnName  =  $”name”

//用 val 获取 column 1对象,如果想看到它的类型的话,你就可以直接补全一下,会发现,这其实是一个 ColumnName 对象。

这个$是从哪来的?

可以点击来看,这其实是不是也是 SQLImplicits 当中的一个隐式转换。会被隐式转换为这个对应的 column name。

//4. col 必须导入 functions,这个 function 里面有很多函数,可以让我们在这种命令式类型的 API 当中来进行使用。

Import _org.apache.spark.sql.functions._

val column2:  spl.Column = col(colName =”name”)

//用 val 获取 column 2对象,如果想看到它的类型的话,你就可以直接补全一下,会发现,这其实是一个 Column 对象。

//5. column 必须导入 functions

val column3:  spl.Column = column(”name”)

//用 val 获取 column 3对象,如果想看到它的类型的话,你就可以直接补全一下,会发现,这其实是一个 Column 对象。

//以上这四种创建方式,没有关联 Dataset ,因为这四种创建方式都是独立函数,都没有关联 Dataset,在 ds 中也可以使用。

比如:

ds.select(column).show()

// Dataset和DataFrame 可以使用  Column 对象选中行

比如说我们再创一个 data frame,怎么创建?

发现在((“zhangsan”,15), (“lisi”:,10))这个集合当中其实是没有指定列名,我们可以指定为第一个为 name,第二个为 age,这样就创建了一个 DataFrame,

代码:

val df: DataFrame =  Seq((“zhangsan”,15),

(“lisi”:,10)).toDF(colName =”name”.”age”)

这个是 Dataset:

val ds: Dataset[Persom]  = Seq(Person(“zhangsan”,15),

person(“lisi”:,10)).toDS()

DataFrame 就是 Dataset, Dataset 就是 DataFrame,它们是一样的

df.select(column).show()

//DataFrame 可以使用  Column 对象选中行

//select 方法可以使用 column 对象来选中某个列,那么其他的算子也可以

df.where(column ===”zhangsan ”).show()

//where 接收的 column 对象,可以进行相应的 show。可以使用这个 column 对象来进行相应的这个运算。

比如说,你想看到这个 column 对象 的当中,让它是等于 zhangsan 的时候才显示出来,那么就可以使用三个“=”等于 zahngsan,这个方式就完成了 where,其实我们前面在使用这个各种各样这种无类型的算子的时候,其实里面传入了对象就是一个 column name 或者 column 对象

//6. dataset.col

//7.dataset.apply

}

}

//这个时候就已经把所有的这个方法创建出来了,创建出来以后,我们如果要想使用 column,

第一步,先创建出来一个spark 对象,

第二步创建方式单引号,

第三步:创建$,

第四步:创建 col

第五步:创建 column

第六步:创建 dataset.col

第七步:创建 dataset.apply。

运行一下这段代码:(图片)

image.pngimage.pngimage.png

包括最后一个 where 的结果也出来了。

相关文章
|
6月前
|
SQL 存储 Oracle
为什么 GROUP BY 之后不能直接引用原表中的列
为什么 GROUP BY 之后不能直接引用原表中的列
43 1
|
6月前
|
JavaScript
为什么data属性是一个函数而不是一个对象?
为什么data属性是一个函数而不是一个对象?
83 1
|
算法 Swift
21 Set的定义和创建
Set的定义和创建
145 0
|
分布式计算 大数据 API
Column 对象_创建_有绑定| 学习笔记
快速学习 Column 对象_创建_有绑定
 Column 对象_创建_有绑定| 学习笔记
|
SQL 分布式计算 大数据
Column 对象_操作_别名和类型 | 学习笔记
快速学习 Column 对象_操作_别名和类型
108 0
Column 对象_操作_别名和类型 | 学习笔记
|
安全 Java
Java中找出List集合中属性名为key属性值为value的对象
在日常开发中,我们需要从一个 List 集合中找出其中某一个对象,下面就介绍如何从 List 集合中找出属性名为 key 属性值为 value 的对象
303 0
Java中找出List集合中属性名为key属性值为value的对象
|
Oracle Java 关系型数据库
JDBC获取数据库列名-关于 ResultSet 对象中列的类型和属性信息
JDBC获取数据库列名-关于 ResultSet 对象中列的类型和属性信息
194 0
|
安全 Java
Java - 找出 List 集合中属性名为 key 属性值为 value 的对象
Java - 找出 List 集合中属性名为 key 属性值为 value 的对象
589 0
Java - 找出 List 集合中属性名为 key 属性值为 value 的对象
Object.create()方法与new操作的区别
Object.create()方法与new操作的区别
147 0
Object.create()方法与new操作的区别
|
前端开发 开发者
z-index 属性 | 学习笔记
快速学习 z-index 属性。
115 0