无类型转换_选择 | 学习笔记

简介: 快速学习无类型转换_选择

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:无类型转换_选择】学习笔记,与课程紧密联系,让用户快速学习知识。

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


无类型转换_选择

我们了解过了有类型的转换算子,并且能看到有类型的转换算法当中,其实大部分转换,那么它里面会接收函数,会处理具体的某一个类型的对象。那么接下来呢,我们要去介绍一下无类型的转换算子。简单来说,无类型的转换算法大多是利用这个 scheme 列信息进行操作。

比如说要去选中某一列,要去按照每一列来做什么样的一件事情。那么称之为叫做无类型的算子。那当然会有一些聚合之类的算子,放在单独的专题里面进行讲解。

 image.png

无类型的算子其实要说的并不多,分别是选择类,新建列,剪除和聚合这四类。通过选择这一类,就能够知道应该把什么样的值怎么放到结果。比如说现在希望往结果集里面放入四个列的值,该怎么放?进入到 idea 当中,去创建一个新的 class

image.png

class UntypedTransformation{

val spark = SparkSession.builder().master(master =”local[6]”).appName(name =”typed”),getOrCreate()

Import spark.implicits._

创建一个新的文件,文件名 select

def select(): Unit =  {

val ds= ( Seq(Person(“zhangsan”,12),

Person(“list”,18),Person(“zhangsan”8)).toDS()

//创建数据集为 ds,通过 toDS 转换为 Dataset

ds.select( cols =’name).show()

//想在结果集里面只有一个 name 可以使用这个方法,还有其他方法,那么这个时候,在这个 SQL 语句当中,经常写为 select*from....,这是一个相当不科学的写法。

之前学的这个 SQL 语句就是这样,所以现在看到这句话不觉得有问题。但是其实真正符合正常人类的这个理解过程,然后包括这个信息组织过程的,应该是 from.....select.....语句。虽然后面因为一些工具,比如说 Spark,它就去解决了这样一个问题,

但没有多少人用 Spark。在 Spark 当中,这个 select( cols =’name)不是必须要放第一位的,在 select 之前,你可以做很多操作。比如说可以 ds.sort,然后可以做许多其它的事情,最后 select 。

不是 select 和 SQL 语句一摸一样,要去掉固定的思考方式。Spark 当中经常最后才去 select ,也就是从一个结果集进行一系列处理,聚合连接和转换等操作全部弄完了,最后 select。

小知识点:在 Dataset 当中,select 可以在任何位置调用。

ds.selectExpr(  exprs=”sum(age)”).show()

import org.apache,spark.sql.functions._

ds.select(  expr=”sum(age)”).show()

//在写 SQL 语句的时候,经常会写 select count(*),这个在 Dataset 当中也可以使用。

先来运行一下,结果已经获取到了第一个结果,这样的一个结果只打印了 name 的这个内容.

接下来继续找。看到了这个 sum(age)这个表达式,这个表达式对最终对应你的年龄是 38 岁。

简单扩展,引入一个新概念,在 select 当中是没有办法写表达式的。想用 select 又要支持表达式,

就要 import org.apache,spark.sql.functions._把所有内容导入进去,接下来,就在这个 select 当中,就可以使用一个叫做 expr 的函数 ds.select(  expr=”sum(age)”),这样就实现了与 selectExpr 一样的功能。

那么这个东西 functions 我们称之为叫做函数,这个里面的函数其实非常的好,也非常的多。这些函数经常会配合 select 等之类的算子拿去和使用。

比如说 expert,它的含义其实把字符串转成一个一个逻辑。然后转成这个执行计划。那么这就是解析表达式的概念。

image.png

运行一下,已经看到结果是 38,与之前一样。这就是我们整个的执行过程与运算方式。

相关文章
|
6月前
|
Java
类型转换
Java中的类型转换是将一个数据类型转换为另一个数据类型的过程。在Java中,有两种类型转换:自动类型转换和强制类型转换。 自动类型转换是指Java自动将小的数据类型转换为大的数据类型,而不需要使用强制类型转换符。 强制类型转换是指Java使用强制类型转换符(如:())将一个数据类型转换为另一个数据类型。强制类型转换只能在两种数据类型之间进行转换,而且只能从大类型转换到小类型。如果从一个小类型转换到一个大类型,那么这个转换是自动进行的,不需要使用强制类型转换符。
26 0
|
7月前
|
存储 安全 编译器
类型转换(C++)
类型转换(C++)
51 0
|
8天前
|
存储 安全 编译器
C++:现代类型转换
C++:现代类型转换
28 5
|
8天前
|
安全 编译器 程序员
【C++】—— C++的类型转换
【C++】—— C++的类型转换
|
5月前
|
存储 安全 编译器
C++类型转换
C++类型转换
56 0
|
5月前
|
安全 程序员 编译器
C++中的类型转换
C++中的类型转换
|
6月前
|
安全 编译器 C语言
|
9月前
|
编译器 C++
【C++】类型转换
【C++】类型转换
46 0
|
9月前
|
程序员 编译器 C++
C++ 几种类型转换
C++ 几种类型转换
|
11月前
|
程序员

热门文章

最新文章