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

Snowflake Snowpark Python UDF展平JSON报错:参数数量不匹配

问题分析

你遇到的ValueError: Incorrect number of arguments passed to the UDF: Expected: 0, Found: 1错误,是因为使用@udf装饰器时,指定session参数的方式导致注册的UDF未正确识别函数的输入参数,最终被定义为无参数UDF,而你调用时传入了列参数,引发参数数量不匹配。

解决方法

有两种可行的修正方式:

方式1:使用session.udf.register显式注册UDF

这种方式逻辑更清晰,能精准控制UDF的注册过程:

from snowflake.snowpark.functions import col
from snowflake.snowpark.types import StringType

def flatten_json(raw_response):
    return raw_response

# 显式注册UDF到指定session
flatten_json_udf = new_session.udf.register(
    func=flatten_json,
    name='flatten_json',
    return_type=StringType(),
    is_permanent=False,
    replace=True
)

# 调用注册好的UDF
data.select(flatten_json_udf(col("raw_response"))).show()

方式2:调整@udf装饰器的使用(不指定session参数)

如果不需要在装饰器阶段立即注册到Snowflake,可以去掉session参数,将UDF作为临时函数使用:

from snowflake.snowpark.functions import udf, col
from snowflake.snowpark.types import StringType

@udf(return_type=StringType())
def flatten_json(raw_response):
    return raw_response

# 直接调用临时UDF
data.select(flatten_json(col("raw_response"))).show()

如果必须注册为命名UDF并保留@udf装饰器,需通过session获取已注册的UDF再调用:

from snowflake.snowpark.functions import udf, col
from snowflake.snowpark.types import StringType

@udf(name='flatten_json', return_type=StringType(), is_permanent=False, replace=True, session=new_session)
def flatten_json(raw_response):
    return raw_response

# 从session中获取已注册的UDF
flatten_json_udf = new_session.udf.get("flatten_json")
data.select(flatten_json_udf(col("raw_response"))).show()

注意:代码中需确保导入StringType(或你需要的VariantType),否则会引发未定义类型的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 22:00:27