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添加一新列
2511 2
|
SQL HIVE
数仓学习-----named_struct和collect_set函数
数仓学习-----named_struct和collect_set函数
498 5
|
存储 关系型数据库 MySQL
Centos Mysql忘记密码,修改密码
Centos Mysql忘记密码,修改密码
569 0
|
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
966 0
|
数据可视化 Linux 数据库连接
Linux达梦数据库:通过disql登录命令行操作数据库,打开达梦数据库自带的数据库管理连接工具
Linux达梦数据库:通过disql登录命令行操作数据库,打开达梦数据库自带的数据库管理连接工具
3277 0
Linux达梦数据库:通过disql登录命令行操作数据库,打开达梦数据库自带的数据库管理连接工具
|
3月前
|
存储 数据管理 Apache
Doris建表分桶选择与优化建议
Apache Doris 中的分桶(Bucketing)是提升查询性能的重要优化手段。通过合理选择分桶列和分桶数,可提高数据并行处理能力与局部性。建议选用高基数、高频查询列作为分桶列,结合数据量与集群规模设置分桶数,推荐使用自动分桶(BUCKETS AUTO)。分桶策略包括哈希分桶与范围分桶,适用于不同场景。合理分桶可优化查询性能、导入效率与资源利用率,建议结合业务特征测试验证最佳方案。
308 0
|
10月前
|
网络协议 安全 网络虚拟化
openvpn-as的三种安装方式
OpenVPN 是一个开源的VPN软件包,支持多种操作系统,可创建基于SSL/TLS的安全隧道。它分为社区版
2002 2
|
存储 SQL HIVE
金融审批数仓(离线)--DWD层、ADS层
金融审批数仓(离线)--DWD层、ADS层
396 4
|
canal SQL 关系型数据库
flink cdc 提交问题之提交任务异常如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
索引 Python
获取dataframe的第一行
在pandas中,可以使用`iloc`函数获取dataframe的第一行。以下是一个例子
1328 0