前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《从0到1学习Spark》--DataFrame和Dataset探秘

《从0到1学习Spark》--DataFrame和Dataset探秘

作者头像
程序员小强
发布2019-09-20 17:08:21
1.3K0
发布2019-09-20 17:08:21
举报

昨天小强带着大家了解了Spark SQL的由来、Spark SQL的架构和SparkSQL四大组件:Spark SQL、DataSource Api、DataFrame Api和Dataset Api。今天小强和大家一起揭开Spark SQL背后DataFrame和Dataset的面纱。

DataFrame和Dataset演变

Spark要对闭包进行计算、将其序列化,并将她们发送到执行进程,这意味着你的代码是以原始形式发送的,基本没有经过优化。在RDD中午发表是结构化数据,对RDD进行查询也不可行。使用RDD很容易但有时候处理元组会把代码弄乱。引入DataFrame和Dataset可以处理数据代码更加易读,支持java、scala、python和R等。

DataFrame用于创建数据的行和列,它就像是关系数据库管理系统中的一张表,DataFrame是一种常见的数据分析抽象。

Dataset结合了DataFrame和RDD的优势:静态类型、会更容易实现RDD的功能特性,以及DataFrame的卓越性能特性。

为什么使用DataFrame和Dataset

小强认为答案很简单:速度和易用性。DataFrame提供了优化、速度、自动模式发现;他们会读取更少的数据,并提供了RDD之间的互相操作性。

1、优化

Catalyst为DataFrame提供了优化:谓词下的推到数据源,只读取需要的数据。创建用于执行的物理计划,并生成比手写代码更优化的JVM字节码。

就像上图这样,DataFrame和Dataset进行了缓存,在缓存时,他们以更加高效的列式自动存储数据,这种格式比java、Python对象明显更为紧凑,并进行了优化。

2、速度

由于优化器会生成用于的JVM字节码,scala和python程序就有相似的性能。Dataset使用优化的编码器把对象进行序列化和反序列化,以便进行并处理并通过网络传输。

3、自动模式发现

要从RDD创建DataFrame,必须提供一个模式。而从JSON、Parquet和ORC文件创建DataFrame时,会自动发现一个模式,包括分区的发现。

实践

在pyspark shell或spark-shell中,会自动创建一个名为spark的预配置SparkSession。

从Spark 2.0及更高的版本,SparkSession成为关系型功能的入口点。当使用Hive时,SparkSession必须使用enableSupport方法创建,用来访问Hive Metastore、SerDes和用户自定义的函数。

创建DataFrame有三种方式:

1、从结构化数据文件创建DataFrame

2、从RDD创建DataFrame

3、从Hive中的表中创建DataFrame

把DataFrame转换为RDD非常简单,只需要使用.rdd方法

常用方法的示例

1、DS与DF的关系

type DataFrame = Dataset[Row]

2、加载txt数据

val rdd = sc.textFile("data") val df = rdd.toDF()

这种直接生成DF,df数据结构为(查询语句:df.select("*").show(5))

只有一列,属性为value。

3、 df.printSchema()

4、使用反射推断模式

小结

小强从DataFrame和Dataset演变以及为什么使用他们,还有对于DataFrame和Dataset创建和互相转换的一些实践例子进行介绍,当时这些都是比较基础的。深入学习Spark SQL需要了解更多Spark SQL提供的方法。后续小强为大家带来Saprk SQL相关方法以及优化。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MoziInnovations 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档