Использование привязок Java H2OApi для получения кадра H2O

Я работаю над проектом Java, используя H2O (3.10.4.7) REST API, предоставляемый привязками H2O Java, и у меня есть следующая проблема:

Нам нужно получить метаданные из существующих кадров H2O, например:

  • Имена столбцов и
  • Типы данных этих столбцов,

предпочтительно использовать H2oApi.class.

Наш подход состоит в том, чтобы извлечь одну строку из кадра H2O, а затем использовать ее для получения необходимых нам метаданных.

До сих пор я пробовал следующее:

 FramesV3 targetFrame = new FramesV3();
 targetFrame.frameId = frameKey; // key provided by import process - works
 targetFrame.rowCount = 1; // get one row to figure out specs of all cols
 H2OApi h2oApi = new H2OApi("http://localhost:54321/");
 FramesV3 result = h2oApi.frames(targetFrame);

Я получаю это исключение:

 java.lang.IllegalArgumentException: @Field parameters can only be used with form encoding. (parameter #1)
 for method Frames.list
 at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:695)
 at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:686)
 at retrofit2.ServiceMethod$Builder.parameterError(ServiceMethod.java:704)
 at retrofit2.ServiceMethod$Builder.parseParameterAnnotation(ServiceMethod.java:476)
 at retrofit2.ServiceMethod$Builder.parseParameter(ServiceMethod.java:328)
 at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:201)
 at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:166)
 at retrofit2.Retrofit$1.invoke(Retrofit.java:145)
 at com.sun.proxy.$Proxy14.list(Unknown Source)
 at water.bindings.H2oApi.frames(H2oApi.java:882)
 at H2ORestCloudTests.getSpecFromFrameTest(H2ORestCloudTests.java:388)

Если я использую конечную точку REST API Frames через браузер, это работает. Пример:

"http://localhost:54321/3/Frames/89a05762-4bcd-41d8-a800-f9cfc3ac73dd?row_count=1"

Результат в браузере:

 {

 "__meta": {
     "schema_version": 3,
     "schema_name": "FramesV3",
     "schema_type": "Frames"
 },
 "_exclude_fields": "",
 "row_offset": 0,
 "row_count": 1,
 "column_offset": 0,
 "column_count": 0,
 "job": null,
 "frames": [
     {
         "__meta": {
             "schema_version": 3,
             "schema_name": "FrameV3",
             "schema_type": "Frame"
         },
         "_exclude_fields": "",
         "frame_id": {
             "__meta": {
                 "schema_version": 3,
                 "schema_name": "FrameKeyV3",
                 "schema_type": "Key<Frame>"
             },
             "name": "89a05762-4bcd-41d8-a800-f9cfc3ac73dd",
             "type": "Key<Frame>",
             "URL": "/3/Frames/89a05762-4bcd-41d8-a800-f9cfc3ac73dd"
         },
         "byte_size": 1928,
         "is_text": false,
         "row_offset": 0,
         "row_count": 1,
         "column_offset": 0,
         "column_count": 5,
         "total_column_count": 5,
         "checksum": -7731554748204616990,
         "rows": 150,
         "num_columns": 5,
         "default_percentiles": [
             0.001,
             0.01,
             0.1,
             0.2,
             0.25,
             0.3,
             0.3333333333333333,
             0.4,
             0.5,
             0.6,
             0.6666666666666666,
             0.7,
             0.75,
             0.8,
             0.9,
             0.99,
             0.999
         ],
         "columns": [
             {
                 "__meta": {
                     "schema_version": 3,
                     "schema_name": "ColV3",
                     "schema_type": "Vec"
                 },
                 "label": "sepal_length",
                 "missing_count": 0,
                 "zero_count": 0,
                 "positive_infinity_count": 0,
                 "negative_infinity_count": 0,
                 "mins": [
                     4.3,
                     4.4,
                     4.4,
                     4.4,
                     4.5
                 ],
                 "maxs": [
                     7.9,
                     7.7,
                     7.7,
                     7.7,
                     7.7
                 ],
                 "mean": 5.843333333333334,
                 "sigma": 0.8280661279778637,
                 "type": "real",
                 "domain": null,
                 "domain_cardinality": 0,
                 "data": [
                     5.1000000000000005
                 ],
                 "string_data": null,
                 "precision": 1,
                 "histogram_bins": null,
                 "histogram_base": 0.0,
                 "histogram_stride": 0.0,
                 "percentiles": null
             },
             ...
 }

Я что-то упустил или, может быть, есть лучший способ получить информацию о кадрах через H2O Java Rest API?

Заранее спасибо и хорошего дня!

Нико


person entusias    schedule 22.05.2017    source источник
comment
Похоже на ошибку в нашем Java API, но я пропингую своих коллег, чтобы убедиться.   -  person Mateusz Dymczyk    schedule 22.05.2017
comment
Эй, Матеуш! Коллега исправил проблему Exception в скрипте Python, отвечающем за создание привязок. Он создал запрос на вытягивание, чтобы исправить другую проблему, но с его изменениями мой код завершается успешно, так что не путайтесь в заголовке. Запрос на вытягивание: github.com/h2oai/h2o-3/pull/1130   -  person entusias    schedule 22.05.2017
comment
да вроде правильно!   -  person Mateusz Dymczyk    schedule 22.05.2017
comment
Об исходном вопросе: нет данных или метаданных о доступных столбцах и их типах данных, возвращаемых при вызове h2oApi.frame(params), поэтому мне интересно, как я могу получить метаданные из кадров H2O без экспорта всего кадра. Я также пытался использовать параметр FrameV3 rowcount=1 в методе export() H2oApi, но экспортированный файл содержит полные данные фрейма. Какие-либо предложения?   -  person entusias    schedule 22.05.2017


Ответы (1)


Чтобы ответить на исходный вопрос (исключение), это действительно ошибка в H2O, в настоящее время нет обходного пути, кроме сборки из эта ветка.

Как указано, этот метод не возвращает метаданные, ответит на эту часть в этот вопрос.

person Mateusz Dymczyk    schedule 30.05.2017