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

如何在PySpark DataFrame中提取列中字符串生成列表新列?

PySpark提取单列中Job名称生成列表新列的简便方法

问题描述

现有一个仅含单列的PySpark DataFrame,示例数据如下:

+------------------------------------------------------------------------------------------------------+
|data                                                                                                  |
+------------------------------------------------------------------------------------------------------+
{Job : "Job A", Condition: "Pass"},{Job : "Job B", Condition: "Pass"}
{Job : "Job C", Condition: "Pass"},{Job : "Job D", Condition: "Pass"},{Job : "Job E", Condition: "Pass"}
+------------------------------------------------------------------------------------------------------+

希望提取其中的Job名称,生成一个列表形式的新列,期望输出如下:

+-----------------------+
|data1                  |
+-----------------------+
["Job A","Job B"]
["Job C","Job D","Job E"]
+-----------------------+

简便实现方法

可以通过字符串正则提取+数组转换直接完成,核心利用Spark的regexp_extract_all函数(Spark 3.0及以上版本支持),一步生成目标数组列。

示例代码

from pyspark.sql import functions as F

# 假设原DataFrame名为df
result_df = df.withColumn(
    "data1",
    # 补全首尾大括号,确保正则能匹配所有Job项,然后提取所有Job名称
    F.regexp_extract_all(F.concat(F.lit("{"), F.col("data"), F.lit("}")), r'Job\s*:\s*"([^"]+)"', 1)
)

# 查看结果
result_df.select("data1").show(truncate=False)

关键说明

  • concat(F.lit("{"), F.col("data"), F.lit("}")):将每行的字符串补全为{...,...}的结构,让正则表达式可以统一匹配所有Job条目,避免首尾的条目漏匹配。
  • regexp_extract_all:一次性提取所有符合正则规则的子串,直接返回数组类型,完美契合生成列表新列的需求。
  • 若使用Spark 2.x版本(无regexp_extract_all),可先拆分片段再聚合,代码示例如下:
from pyspark.sql import functions as F

result_df = df.withColumn("job_item", F.split(F.col("data"), r"\s*},\s*")) \
    .withColumn("job_item", F.explode(F.col("job_item"))) \
    .withColumn("job_name", F.regexp_extract(F.col("job_item"), r'Job\s*:\s*"([^"]+)"', 1)) \
    .groupBy("data") \
    .agg(F.collect_list("job_name").alias("data1")) \
    .select("data1")

result_df.show(truncate=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:34:53