Недопустимое значение для: невозможно проанализировать запрос API прогнозирования Google.

Я пытаюсь использовать Google Prediction API. Я обучил свою модель и проверил предсказание через веб-страницу, и она отлично работает. Тем не менее, теперь я пытаюсь использовать java API для прогнозирования набора записей, но я продолжаю получать сообщение об ошибке.

com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
  "code" : 400,
  "errors" : [ {
    "domain" : "global",
    "message" : "Invalid value for: Unable to parse '[feature1, feature2, feature3, feature4, feature5]'.",
    "reason" : "invalid"
  } ],
  "message" : "Invalid value for: Unable to parse '[feature1, feature2, feature3, feature4, feature5]'."

Мне кажется, что создатель json не заключает функции в кавычки, но я максимально точно следую образцу, и они не изменяют и не модифицируют фабрику json. Вот код создания учетных данных и прогнозов.

private static GoogleCredential authorize() throws Exception {

    GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
            .setServiceAccountScopes(Collections.singleton(PredictionScopes.PREDICTION))
            .setServiceAccountPrivateKeyFromP12File(new File("p12filefromdevconsole.p12"))
            .build();
    return credential;

}

...
Prediction prediction = new Prediction.Builder(
            httpTransport, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();

...
private static Output predict(Prediction prediction, String... features) throws IOException {
    Input input = new Input();
    InputInput inputInput = new InputInput();
    inputInput.setCsvInstance(Collections.<Object>singletonList(features));
    input.setInput(inputInput);
    Output output = prediction.trainedmodels().predict(PROJECT_ID, MODEL_ID, input).execute();
    return output;
}

Любые мысли, что я делаю неправильно?


person EpicOfChaos    schedule 09.10.2014    source источник


Ответы (1)


После долгих разочарований, проб и ошибок я решил эту проблему, используя new ArrayList(Arrays.asList(features)), а не Collections.singletonList(features). Вот модифицированный метод прогнозирования. Имейте в виду, что моя первоначальная реализация была взята непосредственно из образца на веб-сайте Google :(

private static Output predict(Prediction prediction, String... features) throws IOException {
    Input input = new Input();
    InputInput inputInput = new InputInput();
    inputInput.setCsvInstance(new ArrayList(Arrays.asList(features)));
    input.setInput(inputInput);
    Output output = prediction.trainedmodels().predict(PROJECT_ID, MODEL_ID, input).execute();
    return output;
}
person EpicOfChaos    schedule 10.10.2014
comment
в какой версии прогнозирования API существует класс InputInput ?? Я не могу найти класс ни в одной из версий. Пожалуйста помоги..!! - person Chandan Reddy; 24.03.2015