当前位置:   article > 正文

spark withColumn的使用(笔记)

spark withcolumn

 目录

        前言:

         spark withColumn的语法及使用:

        准备源数据演示: 

        完整实例代码:


前言:

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

 spark withColumn的语法及使用:

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

准备源数据进行演示: 

  1. import org.apache.spark.SparkConf
  2. import org.apache.spark.sql.{DataFrame, SparkSession}
  3. import org.apache.spark.sql.functions.{col, lit, rand, round}
  4. object text {
  5. def main(args: Array[String]): Unit = {
  6. //新建spark
  7. val spark = new SparkConf().setMaster("local[*]").setAppName("text")
  8. val sc = SparkSession.builder().config(spark).getOrCreate()
  9. //准备源数据
  10. val tuples = Seq(("小白", 19, "江西"),
  11. ("小红", 20, "安徽"),
  12. ("小兰", 21, "河北"))
  13. val frame = sc.createDataFrame(tuples).toDF("name","age","address")
  14. frame.show()

输出结果为:

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

1.添加新列

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

例子:

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

输出结果为:

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

2. 改变现有列
 

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

 输出结果为:

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

3.将现有列派生出新列
 

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

输出结果为:

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

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

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

 输出结果为:

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

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

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

输出结果为:

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

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

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

输出结果为:

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


完整实例代码:

  1. import org.apache.spark.SparkConf
  2. import org.apache.spark.sql.{DataFrame, SparkSession}
  3. import org.apache.spark.sql.functions.{col, lit, rand, round}
  4. object text {
  5. def main(args: Array[String]): Unit = {
  6. //新建spark
  7. val spark = new SparkConf().setMaster("local[*]").setAppName("text")
  8. val sc = SparkSession.builder().config(spark).getOrCreate()
  9. //准备源数据
  10. val tuples = Seq(("小白", 19, "江西"),
  11. ("小红", 20, "安徽"),
  12. ("小兰", 21, "河北"))
  13. val frame = sc.createDataFrame(tuples).toDF("name","age","address")
  14. frame.show()
  15. //1. 用withColumn为dataframe 添加新列
  16. val seq = Seq("小新", 22, "北京")
  17. val frame1 : DataFrame= frame.withColumn("new",round(rand()*100,1) )
  18. frame1.show()
  19. //2. 改变现有列
  20. val frame2: DataFrame = frame.withColumn("age", col("age") - 5)
  21. frame2.show() // 打印
  22. //3.将现有列派生出新列
  23. var a = "省"
  24. val frame3 : DataFrame= frame.withColumn("newCol", col("age")*10)
  25. frame3.show()
  26. //4.更改数据类型(可以在改变该列的同时进行类型转换)
  27. val frame4 : DataFrame = frame.withColumn("age", col("age").cast("float"))
  28. frame4.show
  29. // 5.重命名列名(需要使用DataFrame的withColumnRenamed)
  30. val frame5: DataFrame = frame.withColumnRenamed("address", "省份")
  31. frame5.show()
  32. // 6. 删除一个列 (使用drop)
  33. val frame6: DataFrame = frame.drop("age")
  34. frame6.show()
  35. }
  36. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/801879
推荐阅读
相关标签
  

闽ICP备14008679号