背景
在使用sparkSQL处理etl数据时,有时候需要直接处理Row对象,比如reduceByKey择一,或者返回值为Row对象的udf,为了简化处理逻辑,需要用户自定义schema,使其自动完成映射。
自定义方法
- 方法一:从历史数据获取schema
val schema = spark.read.parquet("/path").schema
- 方法二:使用StructType定义schema
import org.apache.spark.sql.types._
val schema = ArrayType(StructType(Nil).add("name", StringType).add("active_dates", BinaryType))
- 方法三:利用case class生成schema
import org.apache.spark.sql.catalyst.ScalaReflection
case class MyClass(name: String, active_dates: Array[Byte])
val schema = ScalaReflection.schemaFor[Seq[MyClass]].dataType