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导入数据的四种方式