Pyspark如何将带逗号的数字字符串转换为保留原值的Decimal类型
问题分析
你当前代码存在3个核心错误:
F.regexp_replace的第二个参数.在正则语法中代表匹配任意字符,你当前的写法会把列中所有字符都替换成.,完全破坏了原始数值内容,且该逻辑本身没有存在的必要。- 未导入
DecimalType依赖,直接调用会抛出未定义错误。 - 你操作的列名末尾多了一个空格,若原始列名没有对应空格会导致列不存在报错,同时生成的新列名也会携带多余空格。
修正后代码
from pyspark.sql import functions as F from pyspark.sql.types import DecimalType # 可根据业务需求调整DecimalType参数:第一个为总位数,第二个为小数保留位数 # 示例DecimalType(10,2)代表最大支持总长度10位,小数位保留2位 df2test = df2.withColumn( "ent_Rentabiliteit_ent_rentabiliteit", F.col("ent_Rentabiliteit_ent_rentabiliteit").cast(DecimalType(10, 2)) )
可选校验步骤
转换完成后可执行以下代码验证结果是否符合预期:
# 查看列类型是否正确 df2test.printSchema() # 查看前20条数据的转换结果 df2test.select("ent_Rentabiliteit_ent_rentabiliteit").show()
如果你的原始字符串列存在多余空格、千位分隔符等特殊字符,可先清洗后再做类型转换,示例清洗千位逗号的逻辑:
F.regexp_replace(F.trim("ent_Rentabiliteit_ent_rentabiliteit"), ",", "").cast(DecimalType(10,2))
内容的提问来源于stack exchange,提问作者Regazzi
相关产品推荐
相关产品推荐

