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

在Anaconda中使用SnowPark与fuzzywuzzy时遇NameError问题求助

SnowPark UDF调用fuzzywuzzy报NameError的解决方法

问题描述

我在Anaconda虚拟环境中使用SnowPark,需要集成Snowflake Anaconda仓库的fuzzywuzzy功能。通过SnowPark加载Snowflake表后,编写UDF调用fuzzywuzzy的ratio方法时,触发NameError: name 'fuzzywuzzy' is not defined错误。

复现步骤

  1. 加载Snowflake表:
df = snowflake_session.sql(query_sql)

表结构如下:

----------------------
|  "col1" |  "col2"  |
----------------------
| 1111111 | 1111112  |
| 2222222 | 2222222  |
| 3333333 | 1333243  |
----------------------

注:df类型为snowflake.snowpark.dataframe.DataFrame

  1. 在Anaconda环境安装fuzzywuzzy:
conda install --name snowflake_env -c https://repo.anaconda.com/pkgs/snowflake fuzzywuzzy
  1. 编写UDF并调用:
import fuzzywuzzy as fuzz

@udf(name="fuzzy", is_permanent=False, replace=True, packages=['fuzzywuzzy'])
def fuzzy(x: int, y:int) -> int:
    return fuzz.ratio(x, y)

# 应用UDF
df.select("col1", "col2", fuzzy("col2", "col2")).show()

错误信息

SnowparkSQLException: (1304): 01b05970-0303-0e9b-0000-77590c4bc49a: 100357 (P0000): Python Interpreter Error:
Traceback (most recent call last):
  File "_udf_code.py", line 37, in compute
  File "_udf_code.py", line 26, in wrapper
  File "C:\Users\es_oriol\AppData\Local\Temp\ipykernel_1234\660708773.py", line 5, in fuzzy
NameError: name 'fuzzywuzzy' is not defined
 in function FUZZY with handler compute

解决方案

核心问题分析

SnowPark UDF是在Snowflake云端的Python解释器中执行的,本地的导入语句不会被自动同步到云端执行环境。此外,fuzzywuzzy.ratio方法仅支持字符串输入,直接传入int类型会触发额外错误。

修复步骤

  1. 将导入语句移至UDF函数内部
    云端执行环境需要在UDF代码内部显式导入依赖库,同时将整数转为字符串适配ratio方法的要求,修改UDF定义如下:

    @udf(name="fuzzy", is_permanent=False, replace=True, packages=['fuzzywuzzy'])
    def fuzzy(x: int, y:int) -> int:
        from fuzzywuzzy import fuzz
        return fuzz.ratio(str(x), str(y))
    
  2. 验证包依赖配置
    确保packages参数指定的包名正确,Snowflake Anaconda仓库中的fuzzywuzzy包名为fuzzywuzzy,临时UDF无需额外配置仓库权限。

  3. 调整UDF调用参数
    原代码中调用fuzzy("col2", "col2")是计算同一列的相似度,可根据需求改为对比两列:

    df.select("col1", "col2", fuzzy("col1", "col2")).show()
    

验证结果

修改后重新执行代码,UDF将在云端正确导入fuzzywuzzy库,完成字符串相似度计算并返回预期结果。

内容的提问来源于stack exchange,提问作者Oriol Gilabert López

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:58:38