开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:Column 对象_创建_有绑定】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/690/detail/12079
Column 对象_创建_有绑定
之前讲解知识点:
Column 有四种创建方式,以及 Column 对象可以用作于 Dataset 和 Dataframe,Column 对象可以和命令式的这弱类型的 API 来进行配合使用,比如说 select、where。
还有一种创建方式是通过一个 dataset 来进行创建的,先去创建一个 dataset,
val ds =Seq(Person(“zhangsan”,15),person(“lisi”:,10)).
toDS()
val ds1=Seq(Person(“zhangsan”,15),person(“lisi”:,10)).
toDS()
//6.dataset.col
val column4 : sql.Column =_ds.col(colName =”name”)
val column5 : sql.Column =_ds1.col(colName =”name”)
//column4和 column5的区别:
一个是通过 ds 创建的,还有一个是通过 ds1创建的,column4和 column5是绑定了具体的某一个 dataset。
ds.select(column5).show()//
会报错
输入 ds.select(column5)是不对的,column5是属于 ds1的 dataset
ds.select 属于ds1的 dataset 是会失败的,ds.select(column5).
show()进行运行,结果是报错的,出现 resolved attribute(s) name#7 missing from name#2,age 3....这样的报错,优化器有一个分析的步骤把一个信息加进去,name#7是一个 name 字段编号为7,但是要在这个 name 字段编号为2,age 字段为3的一个 dateset 去选择 name#7 这一列,是选择不到的。
总结:
使用 dataset 来获取 column 对象,会和某个 Dataset 进行绑定,在逻辑计划中,就会有不同的表现。就是前面的通过 Column 对象进入算子之后,才会对应生成#7,现在是直接生成 #7。
//为什么要和 dataset 进行绑定?
ds1.join(ds1, joinExprs= ’name=== ‘name)
使用 ds.select(cols =’name).show 也可以,使用 Dataset 创建 column5的意义是什么?
写一个小的操作:
ds1.join(ds1, joinExprs= ’name=== ‘name),
这个是不对的,要通过 ds.col生成一个 name 列,改为:
ds.join(ds1, ds.col(colName= “name”=== ds1, ds.col(colName= “name”),
和 dataset 做绑定,是为了做这种判定。
//7.dataset.apply
val column6 : sql.Column =ds.apply(“name”)
Val cloumn7 : sql.Column = ds.(“name”)
//通过对象的apply 方法来去创建的一个Column对象.这个 column6 对象通过 ds.apply 创建出来的。apply是什么方法,有什么特点?
如果一个对象有 apply 方法,调用 apply 方法和直接调用这个对象是一样的,只要有apply 方法,ds(“”)里面传入的内容就会给到apply方法,其实 ds(“”) 是 ds.apply(“name”)
的别名,就可以通过 Column创建对象。
总结:
提到了两种创建方式,两种方针方式 dataset.col 和 dataset.apply
,其实都是和 Dataset 进行绑定的,并且介绍了如何使用 Dataset 进行绑定的 column 对象和意义。