本章涵盖了
使用dataframe
在Spark中,dataframe的基本作用
理解数据不变性
快速调试一个dataframe的schema
理解RDDs中的底层存储
在本章中,你将学习如何使用dataframe。dataframe在Spark应用程序中非常重要,因为它通过模式包含类型化数据,并提供了强大的API。
正如您在前面章节中看到的,Spark是一个了不起的分布式分析引擎。维基百科将操作系统定义为“管理计算机硬件和软件资源,并为计算机程序提供公共服务的系统软件”。在第1章中,我甚至将Spark定义为操作系统,因为它提供了构建应用程序和管理资源所需的所有服务。要以编程的方式使用Spark,您需要了解它的一些关键api。为了执行分析和数据操作,Spark需要存储,包括逻辑存储(在应用程序级)和物理存储(在硬件级)。
在逻辑级别,最好的存储容器是dataframe,它是一种类似于关系数据库中的表的数据结构。在这一章中,你将深入研究dataframe的结构,并学习如何通过API使用dataframe。
转换是对数据执行的操作,例如从日期中提取年份、组合两个字段、规范化数据等等。在本章中,您将学习如何使用特定于dataframe的函数来执行转换,以及直接附加到dataframe API的方法。您将使用类似SQL union的操作将两个dataframe合并为一个dataframe。您还将看到dataset和dataframe之间的区别,以及如何相互转换。
最后,您将看到弹性分布式数据集(RDD),它是Spark中的第一代存储。dataframe构建在RDD概念之上,您可能会在讨论和项目中遇到RDDs。
本章的例子被分为多个实验。在本章的最后,您将在两个dataframes中接入两个文件,修改它们的模式以便它们匹配,并合并结果。在执行这些操作时,您将看到Spark如何处理存储。在不同的步骤中,您将检查dataframes。
实验
本章中的例子可以在GitHub中获得:https://github com/jgperrin/net.jgp.books.spark.ch03
3.1 Spark中dataframe的基本作用
在本节中,您将了解什么是dataframe以及它是如何组织的。你还会学到关于不变性的知识。
dataframe既是数据结构又是API,如图3.1所示。在Spark SQL、Spark流处理、MLlib(用于机器学习)和GraphX中使用Spark的dataframe API来操作Spark中的基于图的数据结构。使用这种统一的API可以极大地简化对这些技术的访问。您不必学习每个子库的API。