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

在Databricks中用PySpark提取VectorUDT类型概率列的首个值

从VectorUDT类型列提取第一个元素的解决方法

你的probability列是Spark MLlib特有的VectorUDT向量类型,不属于常规的Struct/Array/MAP类型,所以之前的扩展方式不适用,以下是两种可行的解决方法:

方法1:使用element_at函数(Spark 3.0及以上版本)

Spark 3.0开始支持用element_at直接操作VectorUDT类型,通过1-based索引提取第一个元素:

from pyspark.sql.functions import element_at

# 添加新列存储预测正确的概率
df = df.withColumn("correct_pred_prob", element_at("probability", 1))

方法2:自定义UDF(兼容低版本Spark)

如果你的Spark版本低于3.0,可通过自定义UDF提取向量的第一个元素:

from pyspark.sql.functions import udf
from pyspark.sql.types import DoubleType

# 定义提取向量第一个元素的函数
def extract_first_vec_element(vector):
    return vector[0] if vector is not None else None

# 注册UDF
extract_first_udf = udf(extract_first_vec_element, DoubleType())

# 生成新列
df = df.withColumn("correct_pred_prob", extract_first_udf("probability"))

报错原因说明

  • col("probability.*")仅适用于Struct类型列,而VectorUDT是MLlib专用的向量类型,无法用Struct的扩展语法处理。
  • 直接尝试提取vectorType字段失败,是因为VectorUDT不属于常规的复杂类型(STRUCT/ARRAY/MAP)范畴,需要用MLlib相关的操作方法或上述两种方式处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:12:05