spark DataFrame 重新命名重名的字段

def main(args: Array[String]): Unit = {
    val spark: SparkSession = SparkSession
      .builder()
      .master("local[*]")
      .appName("Test")
      .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
//      .enableHiveSupport()
      .getOrCreate()

    import spark.implicits._
    var user1 = Seq(("A1","10","张三","上海"),("A2","20","李四","北京"),
      ("A3","30","王五","南京")).toDF("id","age","name","address")
    var user2 = Seq(("A2","张飞"),("A3","李逵")).toDF("id","name").toDF()
    var df: DataFrame = user1.join(user2,user1("id")===user2("id"),"left")//.show()
    df = renameDataFrame(df,spark)
    df.show()

}

 

def renameDataFrame(df:DataFrame,spark:SparkSession): DataFrame ={
    val schema: StructType = df.schema
    val arrSchema = ArrayBuffer[StructField]()

    val map = Map[String,Int]()
    schema.foreach(r=>{
      val schName = r.name
      if(map.isEmpty){
        map +=  schName -> 1
        arrSchema.append(StructField(schName,r.dataType,true))
      }else{
        if(map.contains(schName)){
          val num = map.get(schName).getOrElse(0)
          map += schName -> (num+1)
          arrSchema.append(StructField(schName+"_"+num,r.dataType,true))
        }else{
          map +=  schName -> 1
          arrSchema.append(StructField(schName,r.dataType,true))
        }
      }
    })

    val mySchema: StructType = StructType(arrSchema)
//    println(mySchema)
    spark.createDataFrame(df.rdd,mySchema)
  }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值