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
相关产品推荐
相关产品推荐

