PySpark repeat函数动态传列参数实现四位页码补零前缀报错咨询
正确解决方案
你遇到的报错原因是PySpark封装的F.repeat函数第二个参数仅支持传入固定整数常量,不支持传入Column类型的动态计算值,针对你的补零需求有两种成熟实现方式:
方案1:使用原生左填充函数lpad(推荐)
lpad是专门用于字符串左补位到指定长度的内置函数,实现逻辑更简洁性能更优:
from pyspark.sql import functions as F # 先将PAGENO转为字符串,再左补0到总长度4位 df = df.select( F.lpad(F.col("PAGENO").cast("string"), 4, "0").alias("FORMATTED_PAGENO") )
方案2:沿用repeat逻辑的兼容实现
如果你一定要用repeat拼接的方式实现,可以通过expr执行原生SQL语法的repeat,SQL层面的repeat支持传入动态列作为次数参数:
from pyspark.sql import functions as F df = df.select( F.expr("repeat('0', 4 - length(cast(PAGENO as string))) || cast(PAGENO as string)").alias("FORMATTED_PAGENO") )
内容的提问来源于stack exchange,提问作者kartheek
相关产品推荐
相关产品推荐

