如何在PySpark中用正则分隔.read.text()读取的多空格分隔文本
PySpark 读取多空格分隔文本文件实现方法
核心逻辑:利用PySpark内置split函数支持正则表达式的特性,匹配2个及以上连续空格作为分隔符,即可避免误切字段内部的单个空格(比如人名、地址里的单空格)。
实现步骤
- 第一步:读取原始文本为单列DataFrame,每行对应文件里的一整行记录
from pyspark.sql import functions as F # 替换为你的文件实际存储路径 raw_df = spark.read.text("/your/local/or/hdfs/file/path.txt")
- 第二步:用正则规则切分每行内容
正则规则\s{2,}的含义是匹配连续2个及以上的空白字符,代码中反斜杠需要转义,因此写为\\s{2,}:
split_df = raw_df.withColumn("col_array", F.split(F.col("value"), "\\s{2,}"))
- 第三步:按字段顺序从切分后的数组中提取列,设置对应列名
根据示例数据的字段顺序(姓名、职业、地址、邮编),提取生成最终结构化DataFrame:
result_df = split_df.select( F.col("col_array")[0].alias("name"), F.col("col_array")[1].alias("occupation"), F.col("col_array")[2].alias("address"), F.col("col_array")[3].alias("zip_code") )
效果验证
针对给出的示例行(Ryan A. Smith>>>Welder>>>>>>>3200 Smith Street>>>>>>99999,>>>代表多空格),切分后结果完全符合预期:
| name | occupation | address | zip_code |
|---|---|---|---|
| Ryan A. Smith | Welder | 3200 Smith Street | 99999 |
注意:如果文件首行是表头,在读取raw_df后增加一步过滤首行的逻辑即可;如果存在字段缺失的场景,可以根据业务需求补充空值处理逻辑。
内容的提问来源于stack exchange,提问作者Matthew Mendiola
相关产品推荐
相关产品推荐

