理解:RDD并不是被DataFrame和DataSet取代,他们应用的场景的不同的。
Apache Spark 2.0统一API的主要动机是:追求简化Spark。通过减少用户学习的概念和提供结构化的数据进行处理。除了结构化,Spark也提供higher-level抽象和API作为特定领域语言(DSL)。
一、弹性数据集(RDD)
RDD是Spark建立之初的核心API。 RDD是不可变分布式弹性数据集,在Spark集群中可跨节点分区,并提供分布式low-level API来操作RDD,包括transformation和action。
那什么时候用RDD呢?
使用RDD的一般场景:
· 你需要使用low-level的transformation和action来控制你的数据集;
· 你得数据集非结构化,比如,流媒体或者文本流;
· 你想使用函数式编程来操作你得数据,而不是用特定领域语言(DSL)表达;
· 你不在乎schema,比如,当通过名字或者列处理(或访问)数据属性不在意列式存储格式;
· 你放弃使用DataFrame和Dataset来优化结构化和半结构化数据集
二、DataFrame
DataFrame与RDD相同之处,都是不可变分布式弹性数据集。不同之处在于,DataFrame的数据集都是按指定列存储,即结构化数据。类似于传统数据库中的表。DataFrame的设计是为了让大数据处理起来更容易。DataFrame允许开发者把结构化数据集导入DataFrame,并做了higher-level的抽象; DataFrame提供特定领域的语言(DSL)API来操作你的数据集。
三、Dataset
在Spark 2.0中,Dataset具有两个完全不同的API特征:强类型API和弱类型API,见下表。 DataFrame是特殊的Dataset,其每行是一个弱类型JVM object。相对应地,Dataset是强类型JVM object的集合,通过Scala的case class或者Java class。
原文链接:http://mp.weixin.qq.com/s?__biz=MzI0MDIxMDM0MQ==&mid=2247483705&idx=1&sn=5e836945a9951e0cbfd2e3f3dfed4f82&scene=1&srcid=0715CPD32NuX1HAbY8iDldN3&from=groupmessage&isappinstalled=0&utm_source=tuicool&utm_medium=referral