Spark DataFrame简介(一)

Spark DataFrame简介(一)

 

1. DataFrame

本片将介绍Spark RDD的限制以及DataFrame(DF)如何克服这些限制,从如何创建DataFrame,到DF的各种特性,以及如何优化执行计划。最后还会介绍DF有哪些限制。

Spark SQL DataFrame Tutorial - An Introduction to DataFrame

2. 什么是 Spark SQL DataFrame?

从Spark1.3.0版本开始,DF开始被定义为指定到列的数据集(Dataset)。DFS类似于关系型数据库中的表或者像R/Python 中的data frame 。可以说是一个具有良好优化技术的关系表。DataFrame背后的思想是允许处理大量结构化数据。DataFrame包含带schema的行。schema是数据结构的说明。

在Apache Spark 里面DF 优于RDD,但也包含了RDD的特性。RDD和DataFrame的共同特征是不可性、内存运行、弹性、分布式计算能力。它允许用户将结构强加到分布式数据集合上。因此提供了更高层次的抽象。我们可以从不同的数据源构建DataFrame。例如结构化数据文件、Hive中的表、外部数据库或现有的RDDs。DataFrame的应用程序编程接口(api)可以在各种语言中使用。示例包括Scala、Java、Python和R。在Scala和Java中,我们都将DataFrame表示为行数据集。在Scala API中,DataFrames是Dataset[Row]的类型别名。在Java API中,用户使用数据集<Row>来表示数据流。

 

3. 为什么要用 DataFrame?

DataFrame优于RDD,因为它提供了内存管理和优化的执行计划。总结为一下两点:
a.自定义内存管理:当数据以二进制格式存储在堆外内存时,会节省大量内存。除此之外,没有垃圾回收(GC)开销。还避免了昂贵的Java序列化。因为数据是以二进制格式存储的,并且内存的schema是已知的。
b.优化执行计划:这也称为查询优化器。可以为查询的执行创建一个优化的执行计划。优化执行计划完成后最终将在RDD上运行执行。

4.  Apache Spark DataFrame 特性

Spark RDD 的限制-

  • 没有任何内置的优化引擎
  • 不能处理结构化数据.

因此为了克服这些问题,DF的特性如下:

i. DataFrame是一个按指定列组织的分布式数据集合。它相当于RDBMS中的表.

ii. 可以处理结构化和非结构化数据格式。例如Avro、CSV、弹性搜索和Cassandra。它还处理存储系统HDFS、HIVE表、MySQL等。
iii. Catalyst的通用树转换框架分为四个阶段,如下所示:(1)分析解决引用的逻辑计划,(2)逻辑计划优化,(3)物理计划,(4)代码生成用于编译部分查询生成Java字节码。 在物理规划阶段,Catalyst可能会生成多个计划并根据成本进行比较。 所有其他阶段完全是基于规则的。 每个阶段使用不同类型的树节点; Catalyst包括用于表达式、数据类型以及逻辑和物理运算符的节点库。 这些阶段如下所示:

<span>Spark DataFrame简介(一)</span>

5. 创建DataFrames

对于所有的Spark功能,SparkSession类都是入口。所以创建基础的SparkSession只需要使用:
SparkSession.builder()
使用Spark Session 时,应用程序能够从现存的RDD里面或者hive table 或者 Spark 数据源 里面创建DataFrame。Spark SQL能对多种数据源使用DataFrame接口。使用SparkSQL DataFrame 可以创建临时视图,然后我们可以在视图上运行sql查询。

6. Spark中DataFrame的缺点

  • Spark SQL DataFrame API 不支持编译时类型安全,因此,如果结构未知,则不能操作数据
  • 一旦将域对象转换为Data frame ,则域对象不能重构。

7. 总结

综上,DataFrame API能够提高spark的性能和扩展性。避免了构造每行在dataset中的对象,造成GC的代价。不同于RDD API,能构建关系型查询计划。更加有有利于熟悉执行计划的开发人员,同理不一定适用于所有人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119646.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • strstr函数的详细讲解

    strstr函数的详细讲解定义:strstr(str1,str2)函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。比如:charstr2=“cdef”;charstr1=“abcdefgh”;则通过函数,将返回strstr(str1,str2)=cdefgh;如果str1不包含有str2。charstr…

    2022年6月25日
    30
  • 微信公众平台卡券功能_微信账号上的领劵是真是假

    微信公众平台卡券功能_微信账号上的领劵是真是假文章目录1.微信卡券功能介绍2.申请方式2.1公众平台申请2.2开放平台申请3.申请条件3.1公众平台条件3.2开放平台条件4.申请种类、类目、商户类型4.1开放种类4.2开放类目4.3开放商户类型5.申请流程及步骤5.1申请流程5.2申请步骤5.2.1公众平台申请步骤5.2.2开放平台申请步骤6.开发流程6.1制作普通卡券通过微信公众平台制作(免开发)6.2卡券投放6.3卡券核销扩展微信《卡券功能申请类目与资质审核要求》微信《卡券违规处罚及清退规则》1.微信卡券

    2022年8月20日
    10
  • VMware虚拟机安装Ubuntu20.04详细图文教程[通俗易懂]

    VMware虚拟机安装Ubuntu20.04详细图文教程[通俗易懂]Windows下VM16虚拟机安装Ubuntu20.04下载链接和手把手的详细教程,同时还有更换软件源和命令行安装VMTools实现跨系统复制粘贴教程

    2022年10月1日
    2
  • 计算机的139 135 445端口关闭_系统端口设置在哪里

    计算机的139 135 445端口关闭_系统端口设置在哪里近期永恒之蓝勒索病毒迅速传播,基本上都是通过135,137,138,139,445等端口入侵,关闭445135137138139端口是有效预防入侵的方式之一,同时更新微软最新补丁,及时备份重要数据,才能从容应对病毒侵袭,下面重点介绍关闭135,137,138,139,445端口方法。关闭445135137138139端口方法教程方法一:方法二:1、打开Windows徽标(开始菜单)…

    2022年8月31日
    6
  • Android蓝牙开发(二)之蓝牙配对和蓝牙连接

    Android蓝牙开发(二)之蓝牙配对和蓝牙连接上篇文章:https://blog.csdn.net/huangliniqng/article/details/82185983讲解了打开蓝牙设备和搜索蓝牙设备,这篇文章来讲解蓝牙配对和蓝牙连接1.蓝牙配对搜索到蓝牙设备后,将设备信息填充到listview中,点击listiew则请求配对蓝牙配对有点击配对和自动配对,点击配对就是我们选择设备两个手机弹出配对确认框,点击确认…

    2022年6月29日
    113
  • mysql添加唯一索引语句_mysql修改唯一索引语句

    mysql添加唯一索引语句_mysql修改唯一索引语句查看索引showindexfrom数据库表名altertable数据库addindex索引名称(数据库字段名称)PRIMARYKEY(主键索引)ALTERTABLE`table_name`ADDPRIMARYKEY(`column`)UNIQUE(唯一索引)ALTERTABLE`table_name`ADDUNIQUE(`column`)INDEX(普…

    2022年9月20日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号