RDD vs DataSet

RDD vs DataFrame vs DataSet

Posted by Jie on February 28, 2017

Spark 2.0.2 Scala 2.11.8 Java 1.8.0_111

RDD

Spark基础,用户指定数据序列化和反序列化。

DataFrame

属于DataSet

type DataFrame = Dataset[Row]

DataSet

https://databricks.com/blog/2016/01/04/introducing-apache-spark-datasets.html

使用Encoder序列化和反序列化,可以说DataSet的数据集是Encoder。

DataSet有SQLContext,queryExecution,Encoder三个属性,而前两个不参与序列化。

DataSet 相对与RDD,最重要的区别就是Schema, 而且经过Tungsten和Catalyst优化,能减少内存使用和加快计算速度。

// -Xmx1g
// Not enough space to cache
sc.parallelize(1 to 100000000).cache.count

从日志可以看到cache没有足够内存, 没有cache,action需要重新计算.

sc.parallelize(1 to 100000000).toDS.cache.coun

从UI看到占用93.5 MB

// Cached Partitions 2
// Fraction Cached 25%
// Size in Memory 104.1 MB
val rdd = sc.parallelize(1 to 10000000).map(_.toString).cache
rdd.count
// Cached Partitions 	8
// Fraction Cached 100%
// Size in Memory 104.1 MB
val ds = sc.parallelize(1 to 10000000).map(_.toString).toDS.cache
ds.count