自定义函数报错does not have an evaluate method

img


想在Maxcomputer里自定义可生成随机数的函数,上图是在业务流程里新建的Python资源内容,然后根据资源新建了函数rand_func,但是使用这个函数的时候报错:class rand.NumRand for user defined function rand_func does not have an evaluate method
这是我参考的官方帮助文档:
https://help.aliyun.com/document_detail/154431.html
请问是哪错了,应该咋改呀?

参考GPT和自己的思路:

根据你提供的信息,很可能是函数定义中缺少了 evaluate 方法导致报错。evaluate 方法是函数计算平台要求的必须实现的方法,用于评估函数的输入和输出。在你的 Python 代码中,你需要在 NumRand 类中定义 evaluate 方法,以实现函数的逻辑操作。你可以按照以下方式实现 evaluate 方法:

class NumRand:
    def __init__(self, low, high, size):
        self.low = low
        self.high = high
        self.size = size

    def evaluate(self, x):
        import numpy as np
        return np.random.randint(self.low, self.high, size=self.size)

然后在你的 Python 代码中,你可以直接使用 NumRand 类实例化一个对象,并调用 evaluate 方法获取函数执行结果。例如:

def rand_func(**kwargs):
    rand_instance = NumRand(0, 100, 10)
    return rand_instance.evaluate(None)

重新运行代码试试看能否正常执行了。希望这些信息对你有所帮助!

该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据您提供的代码和错误信息,可以看出问题可能是您没有实现evaluate方法。在ODPS中,自定义函数需要实现evaluate方法来进行计算。您的代码中只有rand_func方法,缺少了evaluate方法,因此会报错。

您可以修改您的代码如下:

from odps.udf import annotate
import random
from decimal import Decimal

@annotate("bigint, double, float, decimal->decimal")
class NumRand():
    def evaluate(self, low, high):
        if None in (low, high):
            return Decimal(str(random.random()))
        return Decimal(str(random.uniform(low, high)))


在这个代码中,我们添加了evaluate方法来实现函数的计算,并且返回的结果使用Decimal类型。

希望这可以帮助您解决问题。

找到问题了,函数签名不对,rand_func改为evaluate