You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyspark如何将带逗号的数字字符串转换为保留原值的Decimal类型

问题分析

你当前代码存在3个核心错误:

  1. F.regexp_replace的第二个参数.在正则语法中代表匹配任意字符,你当前的写法会把列中所有字符都替换成.,完全破坏了原始数值内容,且该逻辑本身没有存在的必要。
  2. 未导入DecimalType依赖,直接调用会抛出未定义错误。
  3. 你操作的列名末尾多了一个空格,若原始列名没有对应空格会导致列不存在报错,同时生成的新列名也会携带多余空格。

修正后代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:45:03