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

如何用正则表达式优化PySpark代码解决CSV数据截断问题

PySpark处理CSV时正则异常及列值截断的修复方案

原代码存在的问题

  • dffs_headers = dff.dtypes被注释,循环遍历会直接报错,必须解开注释才能获取列信息
  • withColumn后立刻执行drop(newColumnLabel)是致命错误:刚生成清洗后的列就删掉,等于没做任何值清洗操作
  • 正则表达式转义冗余:^\\‡‡|\\‡‡$里的反斜杠多余,‡不是正则特殊字符,无需转义
  • 列处理逻辑顺序混乱:应该先生成清洗后的列值,再删除原列,而非反过来

修正后的代码

from pyspark.sql.functions import regexp_replace

path="dbfs:/FileStore/df/test.csv"
# 读取CSV,保留原参数配置
dff = spark.read.option("header", "true")\
               .option("inferSchema", "true")\
               .option('multiline', 'true')\
               .option('encoding', 'UTF-8')\
               .option("delimiter", "‡‡,‡‡")\
               .csv(path)

# 解开注释,获取列信息(也可直接用dff.columns遍历列名)
dffs_headers = dff.dtypes

for i in dffs_headers:
    columnLabel = i[0]
    print(columnLabel)
    # 清洗列名:移除所有‡‡字符
    newColumnLabel = columnLabel.replace('‡‡', '')
    # 清洗列值:移除首尾的‡‡,结果存入新列
    dff = dff.withColumn(newColumnLabel, regexp_replace(columnLabel, r'^‡‡|‡‡$', ''))
    # 删除原始列
    if columnLabel != newColumnLabel:
        dff = dff.drop(columnLabel)

# 查看最终处理结果
dff.show(truncate=False)

简化版(直接遍历列名)

如果不需要列类型信息,用dff.columns遍历更简洁:

from pyspark.sql.functions import regexp_replace

path="dbfs:/FileStore/df/test.csv"
dff = spark.read.option("header", "true")\
               .option("inferSchema", "true")\
               .option('multiline', 'true')\
               .option('encoding', 'UTF-8')\
               .option("delimiter", "‡‡,‡‡")\
               .csv(path)

for columnLabel in dff.columns:
    newColumnLabel = columnLabel.replace('‡‡', '')
    dff = dff.withColumn(newColumnLabel, regexp_replace(columnLabel, r'^‡‡|‡‡$', ''))
    if columnLabel != newColumnLabel:
        dff = dff.drop(columnLabel)

dff.show(truncate=False)

修改说明

  1. 解开列信息获取的注释,确保能遍历所有目标列
  2. 移除withColumn后错误的drop操作,保留清洗后的列数据
  3. 使用原始字符串r'^‡‡|‡‡$'简化正则,精准匹配并移除列值首尾的‡‡
  4. 调整逻辑顺序:先生成清洗后的列→再删除原列,保证数据完整保留

内容的提问来源于stack exchange,提问作者thedataengineer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:11:07