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

PySpark替代Pandas apply实现DataFrame整数列转列表类型的方法

PySpark 整数列转单元素数组列解决方案

错误原因分析

你遇到的类型转换报错是因为PySpark的cast方法不支持直接将基础数值类型(如bigint、int)转换为数组类型,仅支持兼容的基础类型、或有对应转换规则的复合类型之间的转换,所以直接cast(ArrayType(IntegerType()))是行不通的。

最优实现方案

使用PySpark内置的array函数即可直接构造数组,该方法是原生实现,性能远高于自定义UDF:

from pyspark.sql.types import IntegerType
from pyspark.sql.functions import col, array

# 构造示例DataFrame
df_sp = spark.createDataFrame([(9,2),(9,3)], schema="a int, b int")

# 将b列转换为单元素数组
df_sp = df_sp.withColumn("b", array(col("b")))

# 如果需要严格指定数组元素为int类型,可先对元素做类型转换再构造数组
# df_sp = df_sp.withColumn("b", array(col("b").cast(IntegerType())))

df_sp.show()

运行后输出结果如下,符合预期:

+---+---+
|  a|  b|
+---+---+
|  9|[2]|
|  9|[3]|
+---+---+

可选方案:自定义UDF实现(不推荐)

如果有特殊的自定义逻辑需要实现,也可以通过UDF完成,但性能比内置函数差:

from pyspark.sql.functions import udf
from pyspark.sql.types import ArrayType, IntegerType

# 定义UDF
to_array_udf = udf(lambda x: [x], ArrayType(IntegerType()))

df_sp = df_sp.withColumn("b", to_array_udf(col("b")))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:36:08