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

如何移除PySpark DataFrame列中的双引号?CSV读写场景

Spark读写CSV移除字段首尾双引号的解决办法

先明确需求:把CSV里类似"xyznm""cxvb"的字段,去掉首尾的双引号,保留中间的"",最终得到xyznm""cxvb。你当前代码里的escape='\"'仅用于处理字段内部的转义引号,没覆盖首尾包围引号的清理需求。

直接上可行方案

第一步:读取数据并清理首尾引号

先按原有逻辑读取CSV,再用正则表达式精准移除字段首尾的双引号,中间的连续引号会完整保留:

from pyspark.sql.functions import regexp_replace, col

# 按你的原有配置读取CSV文件
df = spark.read.format("com.databricks.spark.csv") \
    .option("delimiter", "|") \
    .options(header='true', escape='\"') \
    .load("my_path")

# 清理col1字段首尾的双引号,内部的""不受影响
df_cleaned = df.withColumn("col1", regexp_replace(col("col1"), "^\"|\"$", ""))

# 查看清理后的结果
df_cleaned.show()

这里的正则^\"|\"$专门匹配字段开头或结尾的单个双引号,替换为空即可完成清理。

第二步:写入时避免自动添加引号

写入时必须设置quoteMode="NONE",防止Spark自动给字段重新套上引号:

df_cleaned.write.format('com.databricks.spark.csv') \
    .mode('overwrite') \
    .option("sep", "|") \
    .option("header", "True") \
    .option("quoteMode", "NONE") \
    .option("nullValue", "") \
    .save("path")

可选读取思路

如果原始CSV里的字段引号只是多余的包围,内部的""是实际内容而非转义符,可以直接在读取时禁用引号解析,再做清理:

df = spark.read.format("com.databricks.spark.csv") \
    .option("delimiter", "|") \
    .option("header", "true") \
    .option("quote", None)  # 禁用引号解析,完整读取原始字段内容
    .load("my_path")

# 同样用正则清理首尾引号
df_cleaned = df.withColumn("col1", regexp_replace(col("col1"), "^\"|\"$", ""))

验证结果

处理后的DataFrame显示如下,完全符合期望:

+-----------+
|       col1|
+-----------+
|xyznm""cxvb|
+-----------+

写入后的CSV文件内容也会和上述结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:13:21