一、基本概念
DataFrame它不是Spark SQL提出的,而是早起在R、Pandas语言就已经有了的。
Dataset: A Dataset is a distributed collection of data:分布式的数据集
DataFrame: A DataFrame is a Dataset organized into named columns. 以列(列名、列的类型、列值)的形式构成的分布式数据集,按照列赋予不同的名称
RDD: 弹性分布式数据集 RDD + schema = dataframe RDD套上 schema(表的结构信息)就是 dataframe,它们都是数据集,dataframe更像是一张表
RDD 是一列数据,而dataframe是多列数据,更像是一个数据库表,可以理解为关系型数据库的一张表,而且可以直接理解为python中的同名概念
DataFrame是spark1.3.0版本提出来的(1.3.0以前叫SchemaRDD),spark1.6.0版本又引入了DataSet的,但是在spark2.0版本中,DataFrame和DataSet合并为DataSet
DataFrame = Dataset[Row] ,在 the Scala API中, DataFrame 仅仅是一个 Dataset[Row]类型的别名
Dataset:强类型 typed case class DataFrame:弱类型 Row
DataFrame和DataSet是基于RDDs的,而且这三者之间可以通过简单的API调用进行无缝切换
二、运行环境
RDD: java/scala ==> jvm
python ==> python runtime
DataFrame: java/scala/python ==> Logic Plan(逻辑执行计划,不管什么语言效果都一样)
三、DataFrame和RDD互操作的两种方式:
1)反射:case class 前提:事先需要知道你的字段、字段类型
2)编程:Row 如果第一种情况不能满足你的要求(事先不知道列的属性)
3) 选型:优先考虑第一种