SparkSQL数据抽象
DataFrame
DataFrame是以RDD为基础的分布式数据集,类似传统数据库的二维表格
DataFrame和RDD的区别在于:前者有schema的元信息,即DataFrame所表示的二维表格每一列都有名称和类型
SparkSQL可以查看更多的结构细腻些,可以针对数据源进行优化,RDD无法得知数据的内部结构
特性
- 相当于关系型数据库中的表,但底层有优化
- 以列的方式组合,相当于有schema的RDD
- 提供了一些抽象操作
scheme
scheme信息封装在structType中,包含很多StructField对象
StructType:一个样例类,属性为StructField数组
case class StructType(fields : Array[StructField])
StructField:样例类,有四个属性
case class StructField(
name: String,
dataType: DataType,
nullable: Boolean = true,
metadata: Metadata = Metadata.empty)
Row
DataFrame每条数据封装在Row中,代表每行数数据
DataSet
DataSet是一个强类型的特定领域对象
DataSet是DataFrames的扩展,DataSet = DataFrame + 泛型
DataSet是特殊的DataFrame,DateFram是特殊的RDD