返回值的元组大小错误。预期 23,在 SNOWFLAKE Python UDTF 函数中得到 13?

问题描述 投票:0回答:1

我注册了一个Python udtf。此 udtf 使用

pandas
库执行数据处理 - 用于特征工程过程的 groupby 和 pivot 操作。最后它返回 23 列。

当我使用 select 语句和 partition over by () 命令调用这个 udtf 时,它给了我以下错误:

Wrong tuple size for returned value. Expected 23, got 13 in function.

但是,我在 Sagemaker 中使用类和函数实现了相同的处理,它返回一个包含 23 列的数据框。这意味着一切正常,结构正确,正在定义和共享不同功能的变量。

但不幸的是,这在 Snowflake udtf 中似乎不起作用。另外,另一个有趣的事情是 udtf 在调用相同的注册函数时返回不同的结果。例如,

在时间t:

Wrong tuple size for returned value. Expected 23, got 13 in function.

在t+1,

Wrong tuple size for returned value. Expected 23, got 21 in function.
,然后
Wrong tuple size for returned value. Expected 23, got 3 in function.
等等。

我是 udtf 的新手,正在寻找一些建议来解决这个问题。

提前致谢。

python snowflake-cloud-data-platform
1个回答
0
投票

Snwoflake UDTF 接受多行数据作为输入,以称为分区的方式将它们一起处理,并返回一个值表作为输出。在对某些类别执行 groupby 操作时,udtf 为输入数据中缺失的类别返回空行。而且,因此我得到了错误的元组大小的错误。在使用 Sagemaker 时,pandas 库会立即处理完整的数据帧。然而,udtf 在分区中处理它们。

我能够通过添加这些代码行来解决这个问题:

df_subset['CATEGORY'] = df_subset['THIRD_PARTY'].astype('category')
df_subset['CATEGORY']=df_subset['THIRD_PARTY'].cat.set_categories(list_of_categories)

有了这个,各种分区的缺失类别被填充为 nan 值。使用以下代码 Pivot 工作正常:

unique_pivot = ((groupdf.pivot(index="CLIENT_ID", columns="CATEGORY", values= [f"{category_name}_MEAN", f"{category_name}_STD"])).reset_index()
© www.soinside.com 2019 - 2024. All rights reserved.