根据官网介绍DataFrame、DataSet:
Dataset 是一个分布式的数据集合。是spark1.6版本才出来的。它提供RDD中的有点(强类型、lambda表达式、优化SparkSQL执行引擎)。DataFrame中能用的东西大部分在DataSet都能用。DataSet能够通过JVM对象构建出来。DataSet能使用函数表达式(map、flatmap、filter等等)。DataSet API能在Java和Scala中使用。python暂不支持。在Scala API中,DataFrame可以等于DataSet[Row],DataFrame = Dataset[Row]。
DataFrame是一个以列(列名、列的类型、列值)的形式构成的分布式数据集。它在概念上等同于关系数据库中的表或R / Python中的数据框,但在底层具有更丰富的优化。DataFrame可以从多种来源构建,例如:结构化数据文件(json)、hive中的表、其他外部数据源(mysql、no sql)、已经存在的RDD。DataFrame API在Scala,Java,Python和R中可用。在Scala和Java中,DataFrame由Row
s 的数据集表示。在Scala API中,DataFrame
它只是一个类型别名Dataset[Row]
。而在Java API中,用户需要使用Dataset<Row>
来表示DataFrame
。
Spark 1.3 版本之前是称呼SchemaRDD的,之后才有的DataFrame;其实SchemaRDD不就是把一个Schema作用在RDD之上嘛,其实本质上和DataFrame没有区别。
在1.3版本出来了DataFrame
在1.6版本出来了DataSet