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

如何在Python/PySpark中拆分多分隔符字符串并生成三个指定列表?

解决方案

首先修正你原代码中的错误:row.split(".")没有将拆分结果保存到变量,导致后续操作还是基于原字符串,这会在复杂场景下出错。下面是完整的实现代码:

p1 = "<path_to_parquet file>"
df_ref_parquet = spark.read.option('header', True).parquet(p1)
# 获取原始字符串列表(你提到的第一个列表)
original_list = [x["FILList"] for x in df_ref_parquet.rdd.collect()]

fil_cd_left = []
right_part_list = []
middle_part_list = []

for s in original_list:
    parts = s.split(".")
    # 处理左侧前4个字符的列表:取拆分后第一个元素,切片前4位,不足4位则取全部
    left_part = parts[0][:4]
    fil_cd_left.append(left_part)
    
    # 处理最右侧部分的列表:直接取拆分结果的最后一个元素
    right_part = parts[-1]
    right_part_list.append(right_part)
    
    # 处理两个分隔符之间的部分:仅当拆分后有3个元素时取中间值,否则为空字符串
    middle_part = parts[1] if len(parts) == 3 else ""
    middle_part_list.append(middle_part)

# 打印结果
print("左侧前4字符列表:", fil_cd_left)
print("最右侧部分列表:", right_part_list)
print("中间部分列表:", middle_part_list)

代码说明

  • 拆分字符串:split(".")将每个字符串拆分为列表,例如"cvbn.poiu.sdfg"会被拆分为["cvbn", "poiu", "sdfg"]
  • 左侧前4字符:取拆分后的第一个元素,用[:4]切片,兼容第一个元素长度不足4的情况
  • 最右侧部分:通过parts[-1]直接获取最后一段,无论字符串包含几个分隔符都能正确取值
  • 中间部分:判断拆分后的列表长度,仅当存在两个分隔符(列表长度为3)时取中间元素,否则设为空字符串,你也可以根据需求改为None

更高效的PySpark原生实现(推荐)

直接用collect()将数据拉到本地处理会浪费集群资源,大数据场景下建议用PySpark内置函数在DataFrame层面处理:

from pyspark.sql.functions import split, element_at, substring, when, size

df = spark.read.option('header', True).parquet(p1)
processed_df = df.select(
    "FILList",
    # 左侧前4字符
    substring(split("FILList", "\\.").getItem(0), 1, 4).alias("left_part"),
    # 最右侧部分
    element_at(split("FILList", "\\."), -1).alias("right_part"),
    # 中间部分
    when(size(split("FILList", "\\.")) == 3, split("FILList", "\\.").getItem(1)).otherwise("").alias("middle_part")
)

# 导出为列表
original_list = [row["FILList"] for row in processed_df.collect()]
fil_cd_left = [row["left_part"] for row in processed_df.collect()]
right_part_list = [row["right_part"] for row in processed_df.collect()]
middle_part_list = [row["middle_part"] for row in processed_df.collect()]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:40:28