在使用Spark开发的过程中,DataFrame是经常使用的一个数据类型,它比RDD有了更加高级的API,更高的执行效率。
然而,某些情况下,经需要将一个RDD转换为DataFrame,这一步经常需要生成一个StructType来生成DataFrame的schema。直接生成StructType是一个比较麻烦的过程。由于笔者经常使用,便写的一个生成StructType的函数,通过传入的个字段和类型的组合字符串,直接生成StructType,实际使用中确实方便了不少。于是将这个函数记录下来。
函数如下:
def buildStructType(fields: String): StructType = { StructType(fields.split(",").map(_.split(":")) .map(field => { val fieldType = field(1).toString.toLowerCase() match { case "string" => StringType case "int" => IntegerType case "integer" => IntegerType case "double" => DoubleType case "float" => FloatType case "long" => LongType case "boolean" => BooleanType case _ => StringType } StructField(field(0), fieldType, true) })) }
使用示例:
val fields = "rid:string,cert_id:string,important_type:string,fst_level_mark:string,snd_level_mark:string,trd_level_mark:string,seg_dept_code:string,seg_dest_code:string,capturetime:long,real_date:long" val structType = buildStructType(fields)