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| +----+---+----+
上一篇:
JS实现多线程数据分片下载
下一篇:
Hive导入数据的四种方式
