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

PySpark 2.2中如何对数组列的每个元素执行子串截取操作

PySpark 2.2 数组列元素子串截取方案

由于PySpark 2.2未提供高版本中的transform高阶函数,直接使用UDF是最直接的实现方式,针对你的需求有两种可选实现:

方案1:固定长度切片(适用于连字符前长度完全固定的场景)

你原有代码结果不符合预期的核心原因是切片长度设置错误,你的示例中连字符前的字符串长度为5,因此需要调整切片范围:

import pyspark.sql.functions as F
import pyspark.sql.types as T 

# 切片为前闭后开规则,取前5位需写0:5,同时增加空值判断避免运行报错
cust_udf = F.udf(lambda arr: [x[0:5] for x in arr] if arr is not None else [], T.ArrayType(T.StringType()))
df1 = df1.withColumn('new_column', cust_udf(F.col("col1")))

方案2:按分隔符截取(更鲁棒,不受前置长度变化影响)

如果后续业务中连字符前的长度可能变化,推荐按分隔符-拆分后取第一个元素,逻辑更稳定:

import pyspark.sql.functions as F
import pyspark.sql.types as T 

cust_udf = F.udf(lambda arr: [x.split('-')[0] for x in arr] if arr is not None else [], T.ArrayType(T.StringType()))
df1 = df1.withColumn('new_column', cust_udf(F.col("col1")))

两种方案都兼容PySpark 2.2版本,运行后即可得到你示例中的new_column输出效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:57:02