如何用startswith替换单元格的整个值而非仅匹配字符串?
解决方法
你的需求是将所有以Cancelled开头的Status值统一替换为Eliminate,不需要用regexp_replace或UDF,直接通过条件判断赋值即可。
你的代码问题分析
你之前的代码报错是因为:
- 误用了
replace函数:这里不需要替换字符串中的子串,而是要直接覆盖整个字段值,完全没必要用replace replace的参数顺序错误(Spark的replace函数需要指定被替换的子串和新值)
正确代码
首先导入必要的函数:
from pyspark.sql.functions import when, col
然后执行字段更新:
DF2 = DF1.withColumn( "Status", when(col("Status").startswith("Cancelled"), "Eliminate") .otherwise(col("Status")) )
可选写法(用like匹配)
如果更习惯通配符匹配,也可以写成:
DF2 = DF1.withColumn( "Status", when(col("Status").like("Cancelled%"), "Eliminate") .otherwise(col("Status")) )
执行后就能得到你期望的结果:
| Name | Status |
|---|---|
| Bill | Eliminate |
| Jim | Active |
| Kim | Servicing |
| Rod | Eliminate |
| Tii | Active |
| Meg | Eliminate |
内容的提问来源于stack exchange,提问作者Jaime Neufer
相关产品推荐
相关产品推荐

