spark 将一列的值赋值给另外一列

Spark将一列的值赋值给另外一列

如果有如下数据:
spark 将一列的值赋值给另外一列_第1张图片
我要使col1 =col2,得到如下的结果:
spark 将一列的值赋值给另外一列_第2张图片
在sparkR里面只需要 df$col1 = df$col2就可以实现了,那么在scala里面没有这样的方式,我要如何去实现呢。我搜索了很多次,问了很多群,没有啥简易的操作,于是我最后写下了这样的实现:

实现代码:
  • 关键的函数
  def col1SetValueToCol2(spark:SparkSession,table:DataFrame,setValueColName:String,getValueColName:String):DataFrame={

    val changeDataFrame: DataFrame = table.drop(setValueColName).withColumn(setValueColName, table.col(getValueColName))
    val resDataFrame: DataFrame = getDataFrameColumns(spark,changeDataFrame,table.columns)
    resDataFrame
  }
    def getDataFrameColumns(spark:SparkSession,dataFrame: DataFrame,columns:Seq[String]): DataFrame ={
    dataFrame.select(columns.map(dataFrame(_)):_*)
  }
  • 主程序
import java.util

import org.apache.spark.sql.{DataFrame, Row, SparkSession}
import org.apache.spark.sql.types.{DataType, StringType, StructField, StructType}

import scala.collection.JavaConverters._

object SparkColumnTest {
  def main(args: Array[String]): Unit = {
    val spark: SparkSession = SparkSession.builder().master("local[*]").getOrCreate()
    val structType: StructType = StructType(Seq(
      StructField("col1", StringType, true),
      StructField("col2", StringType, true)
    ))
    val javaRows: util.List[Row] = List[Row](
      Row("1", "a"),
      Row("2", "b"),
      Row("3", "c")
    ).asJava
// 以上是构造数据
    val data: DataFrame = spark.createDataFrame(javaRows, structType)
    data.show()
//调用我写的方法
    col1SetValueToCol2(spark,data,"col1","col2").show()

    spark.stop()
  }
}

结果如下图所示:
数据处理之前
spark 将一列的值赋值给另外一列_第3张图片
数据赋值之后:
spark 将一列的值赋值给另外一列_第4张图片

最后!!!

如果有更好的方法,请在下面留言!!!!谢谢!!!!

你可能感兴趣的:(Spark程序)