Databricks执行PySpark代码触发Column is not iterable报错如何解决
问题原因
- 报错的核心原因是
withColumn方法的第一个参数要求传入字符串格式的列名,你当前传入了col("Cliente")返回的Column类型对象,PySpark内部处理时把传入的Column对象当作可迭代的字符串解析,因此抛出TypeError: Column is not iterable异常。 - 额外注意:你当前的
when逻辑没有加otherwise分支,不满足匹配条件的行的Cliente字段会被自动赋值为NULL,不符合字段替换的预期。
修复后代码
from pyspark.sql.functions import col, when, regexp_replace dim_processo = dim_processo.withColumn( "Cliente", # 第一个参数传字符串格式的列名即可 when( dim_processo.Cliente.endswith('"parque",lda.'), regexp_replace( dim_processo.Cliente, 'Restaurante "parque",lda.', "Restaurante parque,lda." ) ).otherwise(dim_processo.Cliente) # 不匹配的行保留原值 )
补充说明
如果需要全局替换所有匹配的字符串,不需要先判断后缀可以直接调用regexp_replace,简化写法如下:
dim_processo = dim_processo.withColumn( "Cliente", regexp_replace(col("Cliente"), 'Restaurante "parque",lda.', "Restaurante parque,lda.") )
内容的提问来源于stack exchange,提问作者saraz0r
相关产品推荐
相关产品推荐

