PySpark中如何移除CSV表头的双引号与分号?
解决PySpark移除CSV表头和数据中的双引号、分号问题
方法一:读取CSV时直接处理(推荐)
在读取阶段配置quote参数,让Spark自动识别并剥离字段前后的双引号,同时正确解析分号分隔符,避免后续额外处理:
import pyspark.sql.functions as F # 读取CSV时指定分隔符、引号规则,自动处理表头和数据中的引号 df = spark.read.options( delimiter=';', quote='"', # 指定字段包裹的引号字符,Spark会自动去除 header=True ).csv("C:/Project_bankdata.csv") # 若需移除数据中的分号(如字段值内的分号),执行替换 df_cleaned = df.select([F.regexp_replace(c, ';', '').alias(c) for c in df.columns]) df_cleaned.show(10, truncate=0)
读取后表头会自动变为age、job、marital等无引号的名称,数据中的引号也会被自动清理,最后一步的regexp_replace用于移除数据里可能存在的分号。
方法二:读取后修改表头并清理数据
如果已按原方式读取数据,可通过修改列名移除表头引号,再清理数据中的目标字符:
import pyspark.sql.functions as F # 原读取代码 df = spark.read.options(delimiter=';').csv("C:/Project_bankdata.csv", header=True) # 移除表头中的双引号 df = df.toDF(*[col_name.replace('"', '') for col_name in df.columns]) # 移除数据中的双引号和分号 df_cleaned = df.select([F.regexp_replace(c, '[";]', '').alias(c) for c in df.columns]) df_cleaned.show(10, truncate=0)
df.toDF(*[col_name.replace('"', '') for col_name in df.columns]):遍历所有列名,去掉其中的双引号,重新命名表头。regexp_replace(c, '[";]', ''):用正则匹配双引号或分号,替换为空字符串,一次性清理数据中的目标字符。
内容的提问来源于stack exchange,提问作者user20194137
相关产品推荐
相关产品推荐

