【问题标题】:Using H2OApi Java bindings to retrieve H2O Frame使用 H2OApi Java 绑定检索 H2O 帧
【发布时间】:2017-10-21 22:56:36
【问题描述】:

我使用 H2O Java 绑定提供的 H2O (3.10.4.7) REST Api 处理 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 框架端点,它就可以工作。 示例:

"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 获取这些 Frame 信息?

提前感谢您,祝您有美好的一天!

尼哥

【问题讨论】:

  • 看起来像我们的 Java API 中的一个错误,但我会 ping 我的同事以确认。
  • 嘿马特乌斯!一位同事修复了负责生成绑定的 Python 脚本中的异常问题。他创建了一个拉取请求来解决不同的问题,但是通过他的更改,我的代码成功完成,所以不要对标题感到困惑。拉取请求:github.com/h2oai/h2o-3/pull/1130
  • 是的,看起来正确!
  • 关于原始问题:调用h2oApi.frame(params) 时没有返回关于可用列及其数据类型的数据或元数据,所以我想知道如何在不导出 H2O 帧的情况下实现从 H2O 帧获取元数据整个框架。我也试过在H2oApi的export()方法中使用FrameV3参数“rowcount=1”,但是导出的File包含了Frame的完整数据。有什么建议吗?

标签: java h2o


【解决方案1】:

要回答最初的问题(例外),这确实是 H2O 中的一个错误,目前除了从 this branch 构建之外没有其他解决方法。

如指出此方法不返回元数据,将在this question 中回答这部分。

【讨论】:

    猜你喜欢
    • 2017-10-30
    • 2018-10-31
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 2017-11-22
    • 2012-07-02
    • 2015-05-03
    • 2014-01-15
    相关资源
    最近更新 更多