Verwendung von Spark withColumn (Notizen)

 Inhaltsverzeichnis

        Vorwort:

         Syntax und Verwendung von Spark withColumn:

        Bereiten Sie eine Quelldaten-Demo vor: 

        Vollständiger Beispielcode:


Vorwort:

withColumn(): ist eine der Funktionen, die für DataFrame-Operationen in Apache Spark verwendet werden. Ihre Funktion besteht darin, Spalten im DataFrame hinzuzufügen oder zu ersetzen oder vorhandene Spalten zu konvertieren und zu aktualisieren usw.

 Syntax und Verwendung von Spark withColumn:

1. Fügen Sie eine neue Spalte hinzu (verwenden Sie „withColumn“ für Dataframe).
2. Ändern Sie eine vorhandene Spalte
. 3. Leiten Sie eine vorhandene Spalte in eine neue Spalte ab.
4. Ändern Sie den Datentyp (Sie können eine Typkonvertierung durchführen, während Sie die Spalte ändern).
5. Benennen Sie die Spalte um Name (Sie müssen withColumnRenamed von DataFrame verwenden)
6. Eine Spalte löschen (Drop verwenden)

Bereiten Sie Quelldaten für die Demonstration vor: 

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()

Die Ausgabe ist:

+------+------+---------+
|Name |Alter |Adresse|
+------+-------+-- ------+
|Xiaobai | 19 | Jiangxi|
|Xiaohong | 20 | Anhui|
|Xiaolan | 21 | Hebei|
+-------+-------+-- --- --+ 

1. Fügen Sie neue Spalten hinzu

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

Beispiel:

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

Die Ausgabe ist:

+------+-----+-------+---------+
|Name|Alter|Adresse| neu|
+------+- -----+-------+-------+
|Xiaobai | 19 | Jiangxi|27,7 |
|Xiaohong | 20 | Anhui|98,2 |
|Xiaolan| 21 | Hebei| 51,0 |
+ ------+------+-------+-------+

2. Vorhandene Spalten ändern
 

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

 Die Ausgabe ist:

+------+------+-------+
|Name|Alter|Adresse|
+-------+------+---- --+
|Xiaobai | 14| Jiangxi|
|Xiaohong| 15| Anhui|
|Xiaolan | 16| Hebei|
+------+------+-------+

3. Leiten Sie neue Spalten von vorhandenen Spalten ab
 

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

Die Ausgabe ist:

+------+--------+--------+--------+
|Name|Alter|Adresse|neueSpalte|
+----- --+-------+--------+--------+
|Xiaobai | 19 | Jiangxi| 190|
|Xiaohong | 20 | Anhui| 200|
| Xiaolan| 21 | Hebei| 210|
+--------+------+-------+-------+

4. Ändern Sie den Datentyp (Sie können eine Typkonvertierung durchführen, während Sie die Spalte ändern).
 

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

 Die Ausgabe ist:

+-------+-------+-------+
|Name | Alter | Adresse|
+-------+-------+- ------+
|Xiaobai |19,0 | Jiangxi|
|Xiaohong |20,0 | Anhui|
|Xiaolan |21,0 | Hebei|
+-------+-------+-- --- --+

5. Benennen Sie den Spaltennamen um (es müssen DataFrames withColumnRenamed verwendet werden).
 

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

Die Ausgabe ist:

+------+------+------+
|Name|Alter|Provinz|
+------+------+----+
| Xiaobai| 19 |Jiangxi|
|Xiaohong| 20 |Anhui|
|Xiaolan| 21 |Hebei|
+------+-----+------+

6. Eine Spalte löschen (Drop verwenden)
 

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

Die Ausgabe ist:

|Name|Adresse|
+-------+-------+
|Xiaobai | Jiangxi|
|Xiaohong | Anhui|
|Xiaolan | Hebei|
+-------+- --- ---+


Vollständiger Beispielcode:



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()
  }
}

おすすめ

転載: blog.csdn.net/m0_69097184/article/details/132856473