专栏首页文渊之博Spark DataFrame简介(一)

Spark DataFrame简介(一)

1. DataFrame

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

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包括用于表达式、数据类型以及逻辑和物理运算符的节点库。 这些阶段如下所示:

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,能构建关系型查询计划。更加有有利于熟悉执行计划的开发人员,同理不一定适用于所有人。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spark DataFrame简介(二)

    Spark的TimestampType类型与Java的java.sql.Timestamp对应,

    用户1217611
  • 基于Alluxio系统的Spark DataFrame高效存储管理技术

    介绍 越来越多的公司和组织开始将Alluxio和Spark一起部署从而简化数据管理,提升数据访问性能。Qunar最近将Alluxio部署在他们的生产环境中,从而...

    CSDN技术头条
  • 基于Alluxio系统的Spark DataFrame高效存储管理技术

    越来越多的公司和组织开始将Alluxio和Spark一起部署从而简化数据管理,提升数据访问性能。Qunar最近将Alluxio部署在他们的生产环境中,从而将Sp...

    Spark学习技巧
  • 《从0到1学习Spark》-- 初识Spark SQL

    今天小强给大家介绍Spark SQL,小强的平时的开发中会经常使用Spark SQL进行数据分析查询操作,Spark SQL是整个Spark生态系统中最常用的组...

    程序员小强
  • 【视频】大数据实战工具Spark 共64讲

    学习目标 1. 学习Spark配置,掌握Spark集群部署; 2. 学习RDD和Scala,掌握Spark调优和应用开发; 3. 掌握Spark Streami...

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

    昨天小强带着大家了解了Spark SQL的由来、Spark SQL的架构和SparkSQL四大组件:Spark SQL、DataSource Api、DataF...

    程序员小强
  • Koalas,构建在 Apache Spark 之上的 Pandas

    今天和大家简单聊下 Koalas 。简而言之,Koalas 试图在 Spark 之上提供一个和 Python 的 Pandas 一样接口的包。笔者在第一次接触到...

    哒呵呵
  • 基于Spark的机器学习实践 (二) - 初识MLlib

    MLlib是Spark的机器学习(ML)库。 其目标是使实用的机器学习可扩展且简单。 从较高的层面来说,它提供了以下工具:

    JavaEdge
  • Spark发布1.3.0版本

    3月13日,Spark 1.3.0版本与我们如约而至。这是Spark 1.X发布计划中的第四次发布,距离1.2版本发布约三个月时间。据Spark官方网站报道,此...

    张逸

扫码关注云+社区

领取腾讯云代金券