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

PySpark如何读取使用自定义行分隔符\x03的CSV文件

问题原因&解决方法

你原来的写法本身是PySpark读取自定义行分隔符CSV的标准写法,未生效通常是以下几个原因导致,对应调整即可:

  • 首先确认你的PySpark版本,lineSep参数仅在PySpark 2.2及以上版本可用,低于该版本的环境无法识别这个配置项。
  • 处理不可见字符的转义问题:\x03是ASCII控制字符(文本结束符ETX),Python代码中要使用原始字符串避免转义被吞,把lineSep的取值改成raw字符串格式:
df = spark.read.option("lineSep", r"\x03").csv(path)
# 如果需要带表头、指定列类型等,同步补充对应option即可,例如:
# df = spark.read.option("lineSep", r"\x03").option("header", True).csv(path)
display(df)
  • 如果是读取存放在HDFS等分布式存储上的大文件,需要确认文件的实际行分隔符确实是\x03,可以先用text格式读取前几行校验分隔符:
# 读取前10行原始文本,打印二进制内容确认分隔符
spark.read.text(path).limit(10).collect()

如果确认分隔符是\x03,但上述方案还是不生效,可以先以text格式读取所有内容,用split方法手动拆分后再转成DataFrame结构,作为兼容方案:

from pyspark.sql.functions import split, explode

# 读取所有文本,按\x03拆分每行,再展开为行结构
raw_df = spark.read.text(path)
split_df = raw_df.select(explode(split(raw_df.value, r"\x03")).alias("line"))
# 再按CSV的列分隔符拆分line字段为对应列即可,例如列分隔符是逗号的情况:
csv_df = split_df.select(split(split_df.line, ",").alias("cols")).selectExpr("cols[0] as col1", "cols[1] as col2")
display(csv_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:54:03