如何在Spark中用新值更新旧值?PySpark替换水果列值实例
在PySpark中替换列值的实用方法
下面以将fruits列里的Apple替换为Banana为例,介绍几种常用的实现方式:
方法1:使用when+otherwise条件表达式
这是最灵活的方案,支持多条件复杂替换场景:
from pyspark.sql import SparkSession from pyspark.sql.functions import col, when # 初始化Spark会话 spark = SparkSession.builder.appName("ValueReplace").getOrCreate() # 创建示例数据集 data = [("Apple", 10), ("Orange", 20), ("Apple", 15), ("Grape", 5)] df = spark.createDataFrame(data, ["fruits", "quantity"]) # 执行值替换 updated_df = df.withColumn( "fruits", when(col("fruits") == "Apple", "Banana").otherwise(col("fruits")) ) # 查看结果 updated_df.show()
方法2:使用replace函数(Spark 3.1及以上版本)
针对单值或多值的精确替换,这个方法更简洁:
from pyspark.sql.functions import replace # 单值替换 updated_df = df.withColumn( "fruits", replace(col("fruits"), "Apple", "Banana") ) # 也支持批量替换多个值(比如同时替换Apple和Orange) # updated_df = df.withColumn( # "fruits", # replace(col("fruits"), {"Apple": "Banana", "Orange": "Grape"}) # ) updated_df.show()
方法3:使用regexp_replace正则替换
如果需要模糊匹配替换(比如替换包含指定字符的字符串),可以用正则实现:
from pyspark.sql.functions import regexp_replace # 精确匹配Apple(和replace效果一致) updated_df = df.withColumn( "fruits", regexp_replace(col("fruits"), "^Apple$", "Banana") ) # 替换所有包含Apple的字符串(比如"Red Apple"换成"Red Banana") # updated_df = df.withColumn( # "fruits", # regexp_replace(col("fruits"), "Apple", "Banana") # ) updated_df.show()
内容的提问来源于stack exchange,提问作者user18877323
相关产品推荐
相关产品推荐

