Spark中如何向已存在Schema新增StructFields

向已有的Schema新增StructFields

就是StructType的add方法,实际业务中需要动态向DataFrame中新增列时,可以获取最新的配置然后动态更新Schema

/**
 * Creates a new [[StructType]] by adding a new field with no metadata.
 *
 * val struct = (new StructType)
 *   .add("a", IntegerType, true)
 *   .add("b", LongType, false)
 *   .add("c", StringType, true)
 */
def add(name: String, dataType: DataType, nullable: Boolean): StructType = {
  StructType(fields :+ StructField(name, dataType, nullable, Metadata.empty))
}

要注意的是,add方法是返回一个新的Schema,所以需要赋值给引用变量。也可以传入StructField对应的DataType,Nullable参数

def create_schema_from_list(attr_list: List[String]): StructType = {
  // 初始化 schema 并添加第一列
  // 也可以 var schema = (new StructType)先创建一个空的Schema
  var schema = StructType(StructField(attr_list(0), StringType) :: Nil)
  // 添加余下列
  for (i <- 1 until attr_list.length) {
    schema = schema.add(attr_list(i),StringType)
  // println("Test " + attr_list(i))
  }
  return schema
}

简单点的写法如下:

val str = "a,b,c"
var schema = (new StructType)
str.split(",").map(x=>{schema = schema.add(x,StringType)})

更多大数据相关Tips可以关注:https://github.com/josonle/Coding-Now 和 https://github.com/josonle/BigData-Learning

你可能感兴趣的:(Hadoop及Spark学习,#,Learning,Spark)