对于df结构的理解 1、DataFrame = Dataset[Row] DataFrame 在Spark1.6之后就没有单独保存此类,其实是装有Row对象的Dataset Dataset的创建一般会将 Row 封装为一个案例类 而虽然移除了DataFrame这个类,但是还是依旧保存这个方法,是因为它的创建方式灵活, 增加或者删除某个字段时操作方便,而Dataset需要增删某一个字段时,则需要根据需求 创建新的Row对象,程序性能较差 2、Row Row是一个特质,DF 需要存储数据时,需要使用Row的实现类 3、创建DF使用Row的 GenericRow,只保存了表中每一行的值,没有保存表结构信息 4、使用Row的 GenericRowWithSchema class GenericRowWithSchema( values : Array[Any], // 保存每行表中的值 override val schema : StructType // 保存表的字段名和属性 ) extends GenericRow(values) 5、StructType 是以一个里面装着StructField对象的数组 case class StructType( field:Array[StructField] ) 6、StructField case class StructField( name: String, // 字段名称 dataType: DataType, // 字段类型 nullable: Boolean = true, // 字段是否可以为空 metadata: Metadata = Metadata.empty// 字段的附加信息 )
对于DataFrame结构的理解
于 2021-12-22 15:34:07 首次发布