欢迎光临
我们一直在努力

spark withColumn的使用(笔记)

🎯 目标方向: "小辉懂编程 正在向 全力迈进!

🆔 版权声明:原创文章,如需转载请告知作者。

📅 创作时间:2025 年 6 月 4 日

📂 个人主页:小辉懂编程-CSDN博客

📌 专栏系列:嵌入式开发实战 – XX的专栏

💬 互动交流:欢迎 点赞👍|收藏⭐|留言📝,一起交流技术,共同进步!

🌟 公众平台:文章底部公众号(小辉快乐编程)可以获取学习资料,共同进步

🌟 个人格言:"代码改变世界,逻辑塑造未来!"

目录

前言:

         spark withColumn的语法及使用:

准备源数据演示: 

        完整实例代码:


前言:

withColumn():是Apache Spark中用于DataFrame操作的函数之一。它的作用是在DataFrame中添加或替换列,或者对现有列进行转换操作

 spark withColumn的语法及使用:

1. 用withColumn为Dataframe添加新列 2. 改变现有列 3. 将现有列派生出新列 4 .更改数据类型(可以在改变该列的同时进行类型转换) 5 .重命名列名(需要使用DataFrame的withColumnRenamed) 6. 删除一个列 (使用drop)

准备源数据演示: 

import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SparkSession}
import org.apache.spark.sql.functions.{col, lit, rand, round}

object text {
def main(args: Array[String]): Unit = {
//新建spark
val spark = new SparkConf().setMaster("local[*]").setAppName("text")
val sc = SparkSession.builder().config(spark).getOrCreate()
//准备源数据
val tuples = Seq(("小白", 19, "江西"),
("小红", 20, "安徽"),
("小兰", 21, "河北"))
val frame = sc.createDataFrame(tuples).toDF("name","age","address")
frame.show()

输出结果为:

+——+——+———+ |name|age|address| +——+——-+——–+ |小白  | 19     |   江西| |小红  | 20     |   安徽| |小兰  | 21     |   河北| +——-+———+——-+ 

1.withColumn 添加新列

//语法
withColumn(colName : String, col : Column) : DataFrame

例子:

//1. 用withColumn为dataframe 添加新列
val seq = Seq("小新", 22, "北京")
val frame1 : DataFrame= frame.withColumn("new",round(rand()*100,1) )
frame1.show() //打印

输出结果为:

+—-+—–+——-+———+ |name|age|address| new| +—-+——+——-+——-+ |小白| 19   |   江西|27.7 | |小红| 20   |   安徽|98.2 | |小兰| 21   |   河北|51.0 | +—-+—-+——-+——-+

2. 改变现有列  

//2. 改变现有列
val frame2: DataFrame = frame.withColumn("age", col("age") – 5)
frame2.show() // 打印

 输出结果为:

+——+——+——-+ |name|age|address| +——-+——+——+ |小白   | 14|   江西| |小红   | 15|   安徽| |小兰   | 16|   河北| +——+——+——-+

3.将现有列派生出新列  

//3.将现有列派生出新列
val frame3 : DataFrame= frame.withColumn("newCol", col("age")*10)
frame3.show()

输出结果为:

+——+——–+——–+——–+ |name|age|address|newCol| +——-+——-+——–+——–+ |小白   | 19    |   江西|   190| |小红   | 20    |   安徽|   200| |小兰   | 21    |   河北|   210| +—-+—+——-+——+

4.更改数据类型(可以在改变该列的同时进行类型转换)  

//4.更改数据类型(可以在改变该列的同时进行类型转换)
val frame4 : DataFrame = frame.withColumn("age", col("age").cast("float"))
frame4.show

 输出结果为:

+——-+——-+——-+ |name| age|address| +——-+——-+——-+ |小白   |19.0  |   江西| |小红   |20.0  |   安徽| |小兰   |21.0  |   河北| +——-+——-+——-+

5.重命名列名(需要使用DataFrame的withColumnRenamed)  

// 5.重命名列名(需要使用DataFrame的withColumnRenamed)
val frame5: DataFrame = frame.withColumnRenamed("address", "省份")
frame5.show()

输出结果为:

+——+——+——+ |name|age|省份| +——+——+—-+ |小白  | 19  |江西| |小红  | 20  |安徽| |小兰  | 21  |河北| +——+—–+——+

6. 删除一个列 (使用drop)  

// 6. 删除一个列 (使用drop)
val frame6: DataFrame = frame.drop("age")
frame6.show

输出结果为:

|name|address| +——-+——-+ |小白  |   江西| |小红  |   安徽| |小兰  |   河北| +——-+——-+


完整实例代码:

import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SparkSession}
import org.apache.spark.sql.functions.{col, lit, rand, round}

object text {
def main(args: Array[String]): Unit = {
//新建spark
val spark = new SparkConf().setMaster("local[*]").setAppName("text")
val sc = SparkSession.builder().config(spark).getOrCreate()
//准备源数据
val tuples = Seq(("小白", 19, "江西"),
("小红", 20, "安徽"),
("小兰", 21, "河北"))
val frame = sc.createDataFrame(tuples).toDF("name","age","address")
frame.show()

//1. 用withColumn为dataframe 添加新列
val seq = Seq("小新", 22, "北京")
val frame1 : DataFrame= frame.withColumn("new",round(rand()*100,1) )
frame1.show()

//2. 改变现有列
val frame2: DataFrame = frame.withColumn("age", col("age") – 5)
frame2.show() // 打印

//3.将现有列派生出新列
var a = "省"
val frame3 : DataFrame= frame.withColumn("newCol", col("age")*10)
frame3.show()

//4.更改数据类型(可以在改变该列的同时进行类型转换)
val frame4 : DataFrame = frame.withColumn("age", col("age").cast("float"))
frame4.show

// 5.重命名列名(需要使用DataFrame的withColumnRenamed)
val frame5: DataFrame = frame.withColumnRenamed("address", "省份")
frame5.show()

// 6. 删除一个列 (使用drop)
val frame6: DataFrame = frame.drop("age")
frame6.show()
}
}

赞(0)
未经允许不得转载:171主机测评 » spark withColumn的使用(笔记)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址