向已有的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
版权声明:本文为lzw2016原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。