You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark如何根据stat列条件修改Name与Name2字段值

Spark DataFrame条件转换实现

直接上代码和说明,解决你需要的字段更新需求:

先搭好原始数据环境

import pandas as pd
from pyspark.sql import SparkSession
from pyspark.sql.functions import when, col

spark = SparkSession.builder.appName("test").getOrCreate()

# 构造原始DataFrame
data = [['tom','kik',1], ['nick','ken', 1], ['juli','ryan', 2]]
pd_df = pd.DataFrame(data, columns=['Name','Name2', 'stat'])
df = spark.createDataFrame(pd_df)

两种实现方式

方式一:逐列用withColumn更新

这种方式直观,适合分步调试:

# 先更新Name列,再更新Name2列
result_df = df.withColumn(
    "Name",
    when(col("stat") == 1, "toto").otherwise(col("Name"))
).withColumn(
    "Name2",
    when(col("stat") == 1, "toto").otherwise(col("Name"))
)

方式二:用select一次性处理所有列

写法更简洁,适合逻辑清晰的场景:

result_df = df.select(
    when(col("stat") == 1, "toto").otherwise(col("Name")).alias("Name"),
    when(col("stat") == 1, "toto").otherwise(col("Name")).alias("Name2"),
    col("stat")
)

验证结果

执行result_df.show(),就能得到你期望的输出:

+-----+-----+----+
| Name|Name2|stat|
+-----+-----+----+
| toto| toto|   1|
| toto| toto|   1|
| juli| juli|   2|
+-----+-----+----+

逻辑解释

  • 当stat等于1时,Name和Name2统一设为toto
  • 当stat不等于1时,Name保留原值,Name2直接复用Name的内容

内容的提问来源于stack exchange,提问作者DONMEA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:36:24