Dataset 和DataFrame 的区别_Row 对象 | 学习笔记

简介: 快速学习 Dataset 和DataFrame 的区别_Row 对象

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段Dataset 和DataFrame 的区别_Row 对象】学习笔记,与课程紧密联系,让用户快速学习知识。

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


Dataset 和DataFrame 的区别_Row 对象

 

内容介绍:

一、Row 对象的操作

二、DataFrame 的作用和常见操作

 

前面说到 DataFrame 就是 Dataset 放 Row,由此可以说 Dataset 中可以放任意类型的对象,并且它保存有这个对象的内存信息,无论任何类型的对象将其给 DateFrame 都会被转为 Row。所以理解 Row 对象的操作就是在理解 DataFrame 的核心原理是什么?为什么要使用 row 对象。

 

一、Row 对象的操作

row 对象怎么去操作,通过理解 row 对象的操作再去理解 DataFrame 中为什么存放 row。

1.Row 是什么?

Row 对象表示的是一个行

Row 的操作类似于 Scala  中的 Map 数据类型

//一个对象就是一个对象

val p = People(name = "zhangsan" , age = 10)

//同样一个对象,还可以通过一个 Row 对象来表示

val row = Row ( " zhangsan" ,10)

//获取 Row 中的内容

println ( row.get(1))

println( row(1))

//获取时可以指定类型

println( row. getAs [Int](1))

//同时 Row 也是一个样例类,可以进行 match

row match {

case Row(name,age)=> println (name,age)

}

打开 IDAE 在其中创建一个新方法命名为 row

@Test

Def row( ) : Unit = {

//1.Row 如何创建,它是什么

val p =Person(“zhangsan”, 15)

//此时 person 对象表示一个人叫 zhangsan,15岁,其中就是名字列和年龄列两条数据而已。

val row =Row(“zhangsan”,15)

//row 也可以写为 person 一致,zhangsan,15岁

//此时 row 和 person 两者的区别在于 perosn 的列是有名字的叫做 name,而在 row 中并没有这个概念。row 对象必须配合 Schema 对象才会有列名,就是说 row 对象代表了一个通用的数据,其中只存放数据而不知道列名,所以需要搭配 Schema 才可以。

//2.如何从 Row 中获取数据,可以直接 getBoolean、getAS 或 getString,找到对应的类型即可,此处需使用 getString(0)和 getInt(1)其中的0,1为角标的含义,此处与数组有些类似,但数组并不能作为样例类。

row.getString(0)

row.getInt(1)

//3.Row 也是样例类,是其一大特点。

row match{  //传入一个偏函数

Case Row(name ,age ) => println(name ,age)

}

}

}

Case class Person(name,String, age : Int)

以上就是 row 的所有操作。

 

二、DataFrame 的作用和常见操作

1. DataFrame 是什么?

在其中介绍了 DataFrame 其实就是行加上 Schema 信息,而行就是 row 而 Schema 中就是 Schema 信息,而行加上 Schema 信息就组成了列。

DataFrame 是 SparkSQL 中一个表示关系型数据库中表的函数式抽象,其作用是让 Spark 处理大规模结构化数据的时候更加容易。一般 DataFrame 可以处理结构化的数据,或者是半结构化的数据,这两类数据中都可以获取到 Schema 信息也就是说DataFrame 中有 Schema 信息,可以像操作表一样操作 DataFrame 。

1669112007130.jpg

DataFrame 由两部分构成,一是 row 的集合,每个 row 对象表示一个行,二是描述DataFrame 结构的 Schema。

DataFrame 会将整个 DataFrame 数据集给表示为行和列,两部分,同时列又有类型。

如下图:

1669112281129(1).jpg

DataFrame 支持  sQL 中常见的操作,例如: select , filter , join ,group, sort,join 等。

相关文章
|
Python
dataframe添加一新列
dataframe添加一新列
2672 2
|
Java Windows
windows下 安装 Elasticsearch报错warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME
windows下 安装 Elasticsearch报错warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME
1040 0
|
SQL HIVE
数仓学习-----named_struct和collect_set函数
数仓学习-----named_struct和collect_set函数
623 5
|
12月前
|
网络协议 安全 网络虚拟化
openvpn-as的三种安装方式
OpenVPN 是一个开源的VPN软件包,支持多种操作系统,可创建基于SSL/TLS的安全隧道。它分为社区版
2474 2
|
前端开发 开发者 容器
彻底学会CSS 弹性布局flex
【4月更文挑战第1天】 彻底学会CSS 弹性布局flex
272 0
|
SQL 数据采集 分布式计算
Hive 数仓及数仓设计方案
数仓整合企业数据,提供统一出口,用于数据治理。其特点包括面向主题集成和主要支持查询操作。数仓设计涉及需求分析(如咨询老板、运营人员和行业专家)、确定主题指标(如电商的转化率)、数据标准设定、规模与成本计算、技术选型(如Hadoop生态组件)以及数据采集和操作。设计流程涵盖从理解需求到实施SQL函数和存储过程的全过程。
503 3
|
存储 SQL HIVE
金融审批数仓(离线)--DWD层、ADS层
金融审批数仓(离线)--DWD层、ADS层
424 4
|
Cloud Native Go Python
解决Pandas KeyError: “None of [Index([...])] are in the [columns]“问题
解决Pandas KeyError: “None of [Index([...])] are in the [columns]“问题
958 0
|
canal SQL 关系型数据库
flink cdc 提交问题之提交任务异常如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
索引 Python
获取dataframe的第一行
在pandas中,可以使用`iloc`函数获取dataframe的第一行。以下是一个例子
1557 0