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

Snowflake中Python UDF聚合逻辑执行结果不一致问题求助

Snowflake中Python UDF聚合逻辑执行结果不一致问题求助

我最近在Snowflake里尝试用Python UDF结合pandas的groupby/transform做聚合操作,但遇到了一个很奇怪的问题:同样的聚合逻辑,在UDF外部执行完全正常,但放到UDF内部后,得到的结果就不对了。更困惑的是,在Snowflake Worksheet里执行后,「Results」标签页和「PY Output」标签页显示的结果还不一致,而我如果要把结果物化到表中,最终存储的是「Results」里的错误数据,这就让我卡壳了。

先给大家看一下我注册的测试UDF:

create or replace function some_sum(col1 int, col2 varchar)
returns int
language python
RUNTIME_VERSION = 3.9
packages = ('pandas')
handler = 'some_sum'
as $$
import pandas as pd
from _snowflake import vectorized

@vectorized(input=pd.DataFrame)
def some_sum(input_df):
    input_df.columns = ['A', 'B']
    input_df['C'] = input_df.groupby(['B'])['A'].transform('sum')
    return input_df['C']
$$

接下来是我用来测试的Snowpark代码:

import snowflake.snowpark as snowpark
from snowflake.snowpark.functions import col, call_udf
import pandas as pd

def main(session: snowpark.Session): 
    some_df = pd.DataFrame({ 'A' : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'B' : ['c', 'c', 'c', 'd', 'd', 'd', 'e', 'e', 'e', 'e']})
    some_df = session.create_dataframe(some_df)
    result_df = some_df.with_column('teh_sum', call_udf('some_sum', some_df['A'], some_df['B']))
    result_df.show()
    return result_df

执行后,「Results」标签页显示的是错误结果,看起来完全没有执行groupby的sum聚合:

ABTEH_SUM
1c1
2c2
3c3
4d4
5d5
6d6
7e7
8e8
9e9
10e10

但「PY Output」标签页里显示的却是正确的聚合结果:

ABTEH_SUM
1c6
2c6
3c6
4d15
5d15
6d15
7e34
8e34
9e34
10e34

另外,当我不通过UDF,直接在pandas里完成聚合再转成Snowpark DataFrame时,结果是完全正常的,代码如下:

some_df = pd.DataFrame({ 'A' : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'B' : ['c', 'c', 'c', 'd', 'd', 'd', 'e', 'e', 'e', 'e']})
some_df['teh_sum'] = some_df.groupby(['B'])['A'].transform('sum')
result_df = session.create_dataframe(some_df)
return result_df

我刚接触Snowflake和Snowpark不久,可能哪里考虑不周?有没有大佬能帮我分析下为什么会出现这种结果不一致的情况,以及怎么解决这个问题,让UDF能输出正确的聚合结果,并且物化到表中也是正确的?

备注:内容来源于stack exchange,提问作者Delude

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:44:31