[Spark] 从字符串创建StructType

    在使用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)

0 条评论
发表一条评论