Apache Spark 3.2.1导出CSV:如何将单个反斜杠替换为双反斜杠
解决Spark导出CSV时将单个反斜杠替换为双反斜杠的问题
Spark CSV Writer的escape参数仅用于转义分隔符、引号这类与CSV格式相关的特殊字符,无法直接处理数据本身包含的反斜杠。要实现将单个反斜杠替换为双反斜杠的需求,必须先对DataFrame的数据进行预处理,再执行导出操作。
具体实现代码
Python版本
from pyspark.sql.functions import regexp_replace # 预处理Name列:将单个反斜杠替换为双反斜杠 df_processed = df_result.withColumn("Name", regexp_replace("Name", "\\\\", "\\\\\\\\")) # 执行CSV导出 df_processed.repartition(1).write.option('header','true').option("delimiter","|").option("escape", "\\").mode("overwrite").csv(path)
Scala版本
import org.apache.spark.sql.functions.regexp_replace // 预处理Name列:将单个反斜杠替换为双反斜杠 val df_processed = df_result.withColumn("Name", regexp_replace($"Name", "\\\\", "\\\\\\\\")) // 执行CSV导出 df_processed.repartition(1).write.option("header", "true").option("delimiter", "|").option("escape", "\\").mode("overwrite").csv(path)
代码说明
在Spark的字符串表达式中,单个反斜杠需要用两个反斜杠转义,因此:
- 匹配数据中的单个
\,需要写成\\\\(相当于正则表达式里的\) - 替换目标的双反斜杠
\\,需要写成\\\\\\\\(每个反斜杠都要转义两次,最终生成两个实际的反斜杠)
经过预处理后,导出的CSV文件中Mathew\M会被转换为Mathew\\M,满足你的需求。
内容的提问来源于stack exchange,提问作者Sarath Subramanian
相关产品推荐
相关产品推荐

