zoukankan      html  css  js  c++  java
  • Spark SQL DataFrame新增一列的四种方法

    方法一:利用createDataFrame方法,新增列的过程包含在构建rdd和schema中
    方法二:利用withColumn方法,新增列的过程包含在udf函数中
    方法三:利用SQL代码,新增列的过程直接写入SQL代码中
    方法四:以上三种是增加一个有判断的列,如果想要增加一列唯一序号,可以使用monotonically_increasing_id

    代码块:

    //dataframe新增一列方法1,利用createDataFrame方法
    val trdd = input.select(targetColumns).rdd.map(x=>{
      if (x.get(0).toString().toDouble > critValueR || x.get(0).toString().toDouble < critValueL) 
        Row(x.get(0).toString().toDouble,"F")
      else Row(x.get(0).toString().toDouble,"T")      
      })      
    val schema = input.select(targetColumns).schema.add("flag", StringType, true)
    val sample3 = ss.createDataFrame(trdd, schema).distinct().withColumnRenamed(targetColumns, "idx")
    
    //dataframe新增一列方法2
    val code :(Int => String) = (arg: Int) => {if (arg > critValueR || arg < critValueL) "F" else "T"}
    val addCol = udf(code)
    val sample3 = input.select(targetColumns).withColumn("flag", addCol(input(targetColumns)))
    .withColumnRenamed(targetColumns, "idx")
    
    //dataframe新增一列方法3
    input.select(targetColumns).createOrReplaceTempView("tmp")
    val sample3 = ss.sqlContext.sql("select distinct "+targetColname+
        " as idx,case when "+targetColname+">"+critValueR+" then 'F'"+
        " when "+targetColname+"<"+critValueL+" then 'F' else 'T' end as flag from tmp")
    
    //添加序号列新增一列方法4
    import org.apache.spark.sql.functions.monotonically_increasing_id
    val inputnew = input.withColumn("idx", monotonically_increasing_id)
  • 相关阅读:
    6.简易计算器
    5.用户密码管理
    4.方法重载
    3.对象数组做参数
    2.迷你DVD管理系统
    1.二维数组计算班级成绩
    31.向数组中插入一个元素
    30.使用Arrays类的各种方法
    Java开发中的23种设计模式详解(转)
    个人代码归档
  • 原文地址:https://www.cnblogs.com/itboys/p/9762808.html
Copyright © 2011-2022 走看看