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聚合:
| A | B | TEH_SUM |
|---|---|---|
| 1 | c | 1 |
| 2 | c | 2 |
| 3 | c | 3 |
| 4 | d | 4 |
| 5 | d | 5 |
| 6 | d | 6 |
| 7 | e | 7 |
| 8 | e | 8 |
| 9 | e | 9 |
| 10 | e | 10 |
但「PY Output」标签页里显示的却是正确的聚合结果:
| A | B | TEH_SUM |
|---|---|---|
| 1 | c | 6 |
| 2 | c | 6 |
| 3 | c | 6 |
| 4 | d | 15 |
| 5 | d | 15 |
| 6 | d | 15 |
| 7 | e | 34 |
| 8 | e | 34 |
| 9 | e | 34 |
| 10 | e | 34 |
另外,当我不通过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
相关产品推荐
相关产品推荐

