根据Spark的源码(路径:spark/sql/catalyst/src/main/scala/org/apache/spark/sql/types/),我总结了如下图中的各种类型。
这里对图中的各个构件说明:
- 大框的标题是目录下各个文件的名字,例如AbstractDataType就是指文件AbstractDataType.scala。
- 大框中的圆弧小框就是各种类型(Types)的类(Class),而箭头的方向表明了它们的继承关系。
- 两个黄色的大框都是文件AbstractDataType.scala的内容,而这里只是为了显示更清晰的继承关系而将它们分开。
- 黑色的圆弧小框表示这个类是private的,灰色的是protected,而没有颜色就是public的了。
- 另外,从StructType,到StructField,到Metadata的虚箭头线,表示了这些类型实体的包含关系。
从图中可以看到,所有的类型都是DataType的子类。抽象类DataType定义了7个方法:defaultSize, typeName, simpleString, catalogString, sql, json, prettyJson,而其子类会重载这些方法以体现各个子类的特性。下面的例子可以得到各种子类在执行这些方法后得到的值:
import org.apache.spark.sql.types._
case class TypeMethods (
defaultSize: Int,
typeName: String,
simpleString: String,