我注册了一个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 的新手,正在寻找一些建议来解决这个问题。
提前致谢。
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()