Pyspark学习笔记(六)DataFrame简介

2021-09-14 14:58:39 浏览数 (1)

Pyspark学习笔记(六)

文章目录

  • Pyspark学习笔记(六)
  • 前言
  • DataFrame简介
  • 一、什么是 DataFrame ?
  • 二、RDD 和 DataFrame 和 Dataset
  • 三、选择使用DataFrame / RDD 的时机

前言

本篇博客讲的是DataFrame的基本概念


DataFrame简介

主要参考文献:

  1. A Tale of Three Apache Spark APIs: RDDs vs DataFrames and Datasets
  2. RDDs vs. Dataframes vs. Datasets – What is the Difference and Why Should Data Engineers Care?

一、什么是 DataFrame ?

  在Spark中, DataFrame 是组织成 命名列[named colums]的分布时数据集合。它在概念上等同于关系数据库中的表或R/Python中的数据框,但在幕后做了更丰富的优化。DataFrames可以从多种来源构建,例如:结构化数据文件、Hive中的表、外部数据库或现有RDD.

  DataFrame 首先在Spark 1.3 版中引入,以克服Spark RDD 的局限性。Spark DataFrames 是数据点的分布式集合,但在这里,数据被组织到命名列中。DataFrames 可以将数据读取和写入格式, 如 CSV、JSON、AVRO、HDFS 和 HIVE表。它已经针对大多数预处理任务进行了优化,可以处理大型数据集,因此我们不需要自己编写复杂的函数。

  DataFrame 旨在使大型数据集的处理更加容易,允许开发人员将结构强加到分布式数据集合上,从而实现更高级别的抽象;它提供了一个领域特定的语言API 来操作分布式数据。

二、RDD 和 DataFrame 和 Dataset

  Spark Datasets 是 DataFrame API 的扩展,具有RDD和 Datasets的有点。它速度快,并且提供了类型安全的接口。

  注意,不能在Python中创建Spark Dataset。 Dataset API 仅在 Scala 和 Java中可用。即使使用PySpark的时候,我们还是用DataFrame来进行操作,我这里仅将Dataset列出来做个对比,增加一下我们的了解。

图片出处链接.   最初,他们在 2011 年提出了 RDD 的概念,然后在 2013 年提出了数据帧,后来在 2015 年提出了数据集的概念。它们都没有折旧,我们仍然可以使用它们。

RDD

DataFrame

Dataset

数据表示

RDD 是没有任何模式的数据元素的分布式集合

它也是组织成命名列的分布式集合

它是 Dataframes 的扩展,具有更多特性,如类型安全和面向对象的接口

优化

没有针对 RDD 的内置优化引擎。开发人员需要自己编写优化的代码

使用catalyst optimizer进行优化

使用catalyst optimizer进行优化

图式投影

需要手动定义模式

将自动查找数据集的架构

还将使用SQL引擎自动查找数据集的架构

聚合操作

RDD比Dataframes和Dataset执行简单操作(如分组数据)都要慢

提供了一个简单的API来执行聚合操作。它比RDD和Dataset都更快地执行聚合

DataSet比RDDs快,但比Dataframes慢一点

三、选择使用DataFrame / RDD 的时机

  • 如果想要丰富的语义、高级抽象和特定于域的API,请使用DataFrame;
  • 如果 需要高级表达式、筛选器、映射、聚合、平均值、SUM、SQL查询、列式访问和对半结构化数据的lambda函数的使用,请使用DataFrame;
  • 如果您希望在编译时具有更高的类型安全性,则需要类型化JVM对象,利用催化剂优化,并从Tungsten高效的代码生成中获益,请使用DataSet;
  • 如果您希望跨spark库统一和简化API,请使用DataFrame;如果您是R用户,请使用DataFrames;
  • 如果是Python用户,请使用DataFrames,如果需要更多的控制,则使用RDD。

0 人点赞