Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Amazon ML应用程序中的AmazonClientException_Java_Amazon Web Services_Amazon Machine Learning - Fatal编程技术网

Java Amazon ML应用程序中的AmazonClientException

Java Amazon ML应用程序中的AmazonClientException,java,amazon-web-services,amazon-machine-learning,Java,Amazon Web Services,Amazon Machine Learning,我参考以下资源创建一个应用程序,使用我已经使用AmazonML训练过的模型进行实时预测 我已经用模型的名称替换了该值,并且已经在AWS ML控制台中创建了一个端点。但是当我执行main函数时,我得到以下异常: Exception in thread "main" com.amazonaws.AmazonClientException: Unable to load AWS credentials from any provider in the chain at com.amazona

我参考以下资源创建一个应用程序,使用我已经使用AmazonML训练过的模型进行实时预测

我已经用模型的名称替换了该值,并且已经在AWS ML控制台中创建了一个端点。但是当我执行main函数时,我得到以下异常:

Exception in thread "main" com.amazonaws.AmazonClientException: Unable to load AWS credentials from any provider in the chain
    at com.amazonaws.auth.AWSCredentialsProviderChain.getCredentials(AWSCredentialsProviderChain.java:117)
    at com.amazonaws.services.machinelearning.AmazonMachineLearningClient.invoke(AmazonMachineLearningClient.java:1983)
    at com.amazonaws.services.machinelearning.AmazonMachineLearningClient.getMLModel(AmazonMachineLearningClient.java:1585)
    at ML.RealtimePredict.lookupEndpoint(RealtimePredict.java:58)
    at ML.RealtimePredict.predict(RealtimePredict.java:45)
    at ML.RealtimePredict.main(RealtimePredict.java:21)
这是我正在使用的程序(Java):

ML包;
导入java.util.HashMap;
导入java.util.Map;
导入com.amazonaws.services.machinelearning.amazonMachinelearning客户端;
导入com.amazonaws.services.machinelearning.model.*;
公共类实时预测{
公共静态void main(字符串[]args){
字符串mlModelId=“ModelID——我提供了这个”;
RealtimePredict rtp=新的RealtimePredict(mlModelId);
//元数据和元数据示例
字符串元数据=“X1,X2”;
字符串数据=“20,25”;
映射记录=rtp.parseArgs(
metaData.trim().split(“,”),data.trim().split(“,”);
PredictResult响应=rtp.predict(记录);
System.out.println(响应);
}
私有AmazonMachineLearning客户端;
私有字符串mlModelId;
私有字符串端点;
公共实时预测(字符串mlModelId){
client=新AmazonMachineLearningClient();
this.mlModelId=mlModelId;
}
私有映射解析参数(字符串[]元数据,字符串[]数据){
映射记录=新的HashMap();
对于(int i=0;i<(
metaData.length

有人能帮我修一下吗。我想我需要提供访问密钥和安全密钥。但我找不到多少帮助,我如何才能做到这一点。谢谢。

Java代码必须具有能够调用AWS服务的凭据。它正在几个位置搜索这些凭证,直到它放弃并打印出上述异常

请阅读有关不同位置的文档以设置这些凭据:

最佳实践是在本地开发中使用默认凭据配置文件,在云中运行实例/容器/Lambda时使用IAM角色

    package ML;

import java.util.HashMap;
import java.util.Map;

import com.amazonaws.services.machinelearning.AmazonMachineLearningClient;
import com.amazonaws.services.machinelearning.model.*;

public class RealtimePredict {
    public static void main(String[] args) {
        String mlModelId = "ModelID--I provided this";

        RealtimePredict rtp = new RealtimePredict(mlModelId);

        // Example meta-data and data
        String metaData = "X1,X2";

        String data = "20,25";
        Map<String, String> record = rtp.parseArgs(
                metaData.trim().split(","), data.trim().split(","));
        PredictResult response = rtp.predict(record);
        System.out.println(response);
    }

    private AmazonMachineLearningClient client;
    private String mlModelId;
    private String predictEndpoint;

    public RealtimePredict(String mlModelId) {
        client = new AmazonMachineLearningClient();
        this.mlModelId = mlModelId;
    }

    private Map<String, String> parseArgs(String[] metaData, String[] data) {
        Map<String, String> record = new HashMap<>();

        for (int i = 0; i < (
                metaData.length < data.length ? metaData.length : data.length); i++) {
            record.put(metaData[i].trim(), data[i].trim());
        }
        return record;
    }

    private PredictResult predict(Map<String, String> record) {
        lookupEndpoint();
        PredictRequest request = new PredictRequest()
                .withMLModelId(mlModelId)
                .withPredictEndpoint(predictEndpoint)
                .withRecord(record);
        return client.predict(request);
    }

    /**
     * finds the realtime endpoint for this ML Model
     */
    private void lookupEndpoint() {
        GetMLModelRequest request = new GetMLModelRequest().withMLModelId(mlModelId);
        GetMLModelResult model = client.getMLModel(request);
        predictEndpoint = model.getEndpointInfo().getEndpointUrl();
    }
}