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

将Spark SQL高阶函数Lambda变量传入自定义SQL UDF时出错

解决Spark SQL中transform调用自定义SQL UDF的AnalysisException错误

当在Spark SQL的transform(即array_transform)函数中调用自定义SQL UDF时,若遇到Resolved attribute(s) val missing这类解析错误,可通过以下方式修复:

修正后的调用语句

将UDF调用用括号包裹,帮助SQL解析器正确识别lambda变量的作用域:

select transform(col1, val -> (printStr(val))) from values

问题原因

在Spark 3.2.1(Databricks Runtime 10.4 LTS)的SQL解析逻辑中,lambda表达式内部直接调用自定义UDF时,解析器无法正确区分lambda参数(如这里的val)与表列,误将lambda变量当作表的属性列处理,从而抛出解析异常。添加括号后,解析器能明确这是lambda内部的表达式,正确绑定lambda变量。

完整验证步骤

  1. 重新创建UDF(确保定义正确):
CREATE or REPLACE FUNCTION printStr(str String )
  RETURNS STRING
  COMMENT 'print given string'
  LANGUAGE SQL
  RETURN str
  1. 创建测试临时视图:
CREATE or REPLACE TEMP VIEW values AS 
select * from values (array("1","2","3")), (array("2","3","5")), (array("3","44"))
  1. 执行修正后的查询语句,即可正常返回转换后的数组结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:20:24