遇到一个Bug,大数据计算MaxCompute用Java-sdk方式创建的函数会报错找不到文件资源?[阿里云MaxCompute]

遇到一个Bug,大数据计算MaxCompute用Java-sdk方式创建的函数会报错找不到文件资源?

但是用这三种方式创建的自定义函数都是正常的

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
2 条回复 A 作者 M 管理员
  1. 用sdk的方式建好的函数,报错找不到资源,着急用的话先用SQL的方式传一下吧。
    我用你截图中的代码试了下,可以用。要不你再检查下步骤。其中用到的jar包,需要提前上传到project里。

    ,此回答整理自钉群“MaxCompute开发者社区2群”

  2. 这个错误信息通常表示MaxCompute SDK在查找函数定义文件时遇到了问题。这可能是因为文件路径不正确,或者文件不存在。

    以下是一些可能的解决方法:

    1. 检查文件路径:确保你的函数定义文件的路径是正确的,并且可以在SDK的搜索路径中找到。

    2. 检查文件权限:确保你的文件有足够的权限被SDK访问。

    3. 检查文件存在:确保你的文件存在,并且没有被移动或删除。

    4. 更新SDK:如果你的SDK版本过低,可能会出现一些已知的问题。你可以尝试更新到最新的SDK版本。

    5. 提交工单:如果以上方法都无法解决问题,你可以提交一个工单给阿里云的技术支持团队,他们会帮助你进一步排查问题。

  3. Function 对象时,没有正确设置资源路径(resourceList)导致的。请尝试将资源文件(MaxComputeUDF-1.0-SNAPSHOT.jar)添加到项目的类路径中,或者将资源文件的路径添加到 resourceList 中。
    以下是一个使用 Maven 的示例,将依赖的 JAR 文件添加到项目的类路径中:

    1. 在项目的根目录下创建一个名为 pom.xml 的文件。
    2. 在 pom.xml 文件中添加以下内容:

    com.aliyun.odps
    maxcompute-client
    1.0.0

    CopyCopy

    1. 在项目的编译配置中,使用 Maven 编译项目。例如,在 IntelliJ IDEA 中,选择 File -> Project Structure -> Project,然后选择 Dependencies 标签页,点击 + 按钮添加依赖。
    2. 在 Java 代码中,使用 odps.functions() 创建 Function 对象,如下所示:

    import com.aliyun.odps.functions.udf.UDF;
    import com.aliyun.odps.udf.UDFException;
    public class UpperTest extends UDF {
    public String evaluate(String input) throws UDFException {
    return input.toUpperCase();
    }
    }
    CopyCopy

    1. 在创建 Function 对象时,设置资源路径(resourceList):

    import com.aliyun.odps.Odps;
    import com.aliyun.odps.account.Account;
    import com.aliyun.odps.udf.UDF;
    import com.aliyun.odps.udf.UDFException;
    public class Main {
    public static void main(String[] args) {
    Odps odps = new Odps();
    Account account = odps.getAccount();
    String projectName = account.getDefaultProject();
    ArrayList resourceList = new ArrayList();
    resourceList.add(“MaxComputeUDF-1.0-SNAPSHOT.jar”);
    UpperTest func = new UpperTest();
    func.setName(“upperTest”);
    func.setResources(resourceList);
    try {
    odps.functions().create(projectName, func);
    } catch (UDFException e) {
    e.printStackTrace();
    }
    }
    }