當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python PySpark Column withField方法用法及代碼示例


PySpark 列的withField(~) 方法用於添加或更新嵌套字段值。

參數

1. fieldName | string

嵌套字段的名稱。

2. col | Column

要添加或更新的新列值。

返回值

PySpark 列 (pyspark.sql.column.Column)。

例子

考慮以下帶有嵌套行的 PySpark DataFrame:

from pyspark.sql import Row
data = [
 Row(name="Alex", age=20, friend=Row(name="Bob",age=30)),
 Row(name="Cathy", age=40, friend=Row(name="Doge",age=40))
]
df = spark.createDataFrame(data)
df.show()



+-----+---+----------+
| name|age|    friend|
+-----+---+----------+
| Alex| 20| {Bob, 30}|
|Cathy| 40|{Doge, 40}|
+-----+---+----------+

這裏, friend 列包含嵌套的 Row ,可以通過打印模式來確認:

df.printSchema()



root
 |-- name: string (nullable = true)
 |-- age: long (nullable = true)
 |-- friend: struct (nullable = true)
 |    |-- name: string (nullable = true)
 |    |-- age: long (nullable = true)

更新 PySpark 中的嵌套行

要更新嵌套行,請使用 withField(~) 方法,如下所示:

import pyspark.sql.functions as F
updated_col = df["friend"].withField("name", F.lit("BOB"))
df.withColumn("friend", updated_col).show()



+-----+---+---------+
| name|age|   friend|
+-----+---+---------+
| Alex| 20|{BOB, 30}|
|Cathy| 40|{BOB, 40}|
+-----+---+---------+

請注意以下事項:

  • 我們正在使用常量字符串 "BOB" 更新 friend 列的 name 字段。

  • F.lit("BOB") 返回一個 Column 對象,其值用字符串 "BOB" 填充。

  • withColumn(~) 方法將 DataFrame 的 friend 列替換為 withField(~) 返回的更新列。

使用 PySpark 中的原始值更新嵌套行

要使用原始值更新嵌套行,請使用 withField(~) 方法,如下所示:

updated_col = df["friend"].withField("name", F.upper("friend.name"))
df.withColumn("friend", updated_col).show()



+-----+---+----------+
| name|age|    friend|
+-----+---+----------+
| Alex| 20| {BOB, 30}|
|Cathy| 40|{DOGE, 40}|
+-----+---+----------+

在這裏,我們使用 F.upper("friend.name") friend 列的 name 字段大寫,這會返回 Column 對象。

在 PySpark 的嵌套行中添加新字段值

withField(~) 列還可用於在嵌套行中添加新字段值:

updated_col = df["friend"].withField("upper_name", F.upper("friend.name"))
df_new = df.withColumn("friend", updated_col)
df_new.show()



+-----+---+----------------+
| name|age|          friend|
+-----+---+----------------+
| Alex| 20|  {Bob, 30, BOB}|
|Cathy| 40|{Doge, 40, DOGE}|
+-----+---+----------------+

現在,檢查新的 PySpark DataFrame 的架構:

df_new.printSchema()



root
 |-- name: string (nullable = true)
 |-- age: long (nullable = true)
 |-- friend: struct (nullable = true)
 |    |-- name: string (nullable = true)
 |    |-- age: long (nullable = true)
 |    |-- upper_name: string (nullable = true)

我們可以看到新的嵌套字段upper_name已添加!

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 PySpark Column | withField method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。