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

Python转Scala UDF报wrappedArray$ofRef无法转immutable.Seq如何解决

错误原因
  • 类型不匹配:Spark向UDF传递数组类型参数时,实际传入的是scala.collection.mutable.WrappedArray类型,你代码中入参声明的Seq[String]默认指向scala.collection.immutable.Seq,二者没有继承关系,强制类型转换时触发报错。
  • 业务逻辑偏差:你当前代码中toSet.count(z => true)仅统计了集合元素个数,原Python代码中o_set < n_set是判断o_set是n_set的真子集,并非比较元素数量,当前逻辑和原始需求不符。
修复方案

将UDF入参改为兼容Spark传入类型的声明,同时修正集合判断逻辑,修复后代码如下:

import org.apache.spark.sql.functions.udf

def col_c = udf((o_row_ids: scala.collection.Seq[String], n_row_ids: scala.collection.Seq[String]) => {
    val oSet = o_row_ids.toSet
    val nSet = n_row_ids.toSet
    if (oSet == nSet) "In"
    else if (oSet.subsetOf(nSet)) "Me"
    else if (nSet.subsetOf(oSet)) "Sp"
    else "SM"
})

如果要更明确匹配Spark的数组类型,也可以直接将入参声明为WrappedArray[String],效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:18:03