【Spark】RDD、DataSet和DataFrame的区别
一、相同点
1. Spark下分布式弹性数据集
2. 惰性机制
Spark提供Transformation与Action两种操作类型,其中Transformation采用延迟执行的方式,在逻辑上定义了数据集的依赖关系和计算逻辑,只有等到Action才会触发真正执行操作。
3. 自动缓存运算
4. Partitions
5. DataFrame和DataSet拥有完全相同的成员函数
Dataset和DataFrame拥有完全相同的成员函数,区别只是每一行的数据类型不同,DataFrame也可以叫Dataset[Row],每一行的类型是Row,不解析,每一行究竟有哪些字段,各个字段又是什么类型都无从得知。Dataset中,每一行是什么类型是不一定的,在自定义了case class之后可以很自由的获得每一行的信息。
二、不同点
1. RDD
- 不支持SparkSql
2. DataFrame
- 与RDD、DataSet不同,每一行的类型固定为Row,只有通过解析才能获取各个字段的类型及其具体类型的值,如下,解析Row与构造Row,每一列的值没法直接访问
1. 解析row
testDF.foreach{
line =>
val col1=line.getAs[String]("col1")
val col2=line.getAs[String]("col2")
}
2. 构造row
var columns: Set[Column] = Set()
for (r <- resultFieldList) {
columns = columns.+(col(r))
}
result = result.select(columns.toList