快捷搜索: 王者荣耀 脱发

DataFram列操作_withColumn()

一、说明

1、常用列对象: 、$ 、col 、column;

2、withColumn的第二个参数要传入已有列的Column对象,否则会报错;

3、sql.functions.lit()函数,返回的也是列对象,可以传入任意参数值;

二、实例

1、testData

张三,23
李四,24
王五,25
赵六,26

2、代码

package com.cn.dataFram

import org.apache.spark.sql.{DataFrame, Dataset, SparkSession}
import org.apache.spark.sql.functions._
object DataFram {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName("")
      .master("local[1]")
      .getOrCreate()

    spark.sparkContext.setLogLevel("WARN")

    import spark.implicits._
    val ds: Dataset[String] = spark.read.textFile("testData")
    val df: DataFrame = ds.map(x => x.split(","))
      .map(x => (x(0), x(1)))
      .toDF("name","age")
      .cache()

    /**
      * withColumn的第二个参数要传入已有列的Column对象,否则会报错;
      * column的表达式只能引用此数据集提供的属性。 添加引用其他数据集的列是错误的
      */
    //df.withColumn("sno","22")//报错

    //展示name,age列
    df.show()

    /**
      * def lit(literal : scala.Any) : org.apache.spark.sql.Column
      * sql.functions.lit()函数,返回的也是列对象,可以传入任意参数值;
      */
    df.withColumn("sno",lit("22"))
      //为列进行重命名
      .withColumnRenamed("name","newName")
      .show()

    /**
      * 列对象: 、$ 、col 、column
      */
    df.withColumn("sno1",age+1).show()

    df.withColumn("sno2",$"age").show()

    df.withColumn("sno3",col("age")+2).show()

    df.withColumn("sno4",column("age")+3).show()

  }
}

3、输出结果

+----+---+
|name|age|
+----+---+
|  张三| 23|
|  李四| 24|
|  王五| 25|
|  赵六| 26|
+----+---+

+-------+---+---+
|newName|age|sno|
+-------+---+---+
|     张三| 23| 22|
|     李四| 24| 22|
|     王五| 25| 22|
|     赵六| 26| 22|
+-------+---+---+

+----+---+----+
|name|age|sno1|
+----+---+----+
|  张三| 23|24.0|
|  李四| 24|25.0|
|  王五| 25|26.0|
|  赵六| 26|27.0|
+----+---+----+

+----+---+----+
|name|age|sno2|
+----+---+----+
|  张三| 23|  23|
|  李四| 24|  24|
|  王五| 25|  25|
|  赵六| 26|  26|
+----+---+----+

+----+---+----+
|name|age|sno3|
+----+---+----+
|  张三| 23|25.0|
|  李四| 24|26.0|
|  王五| 25|27.0|
|  赵六| 26|28.0|
+----+---+----+

+----+---+----+
|name|age|sno4|
+----+---+----+
|  张三| 23|26.0|
|  李四| 24|27.0|
|  王五| 25|28.0|
|  赵六| 26|29.0|
+----+---+----+
经验分享 程序员 微信小程序 职场和发展