【问题标题】:H2oApi Java bindings columns endpoint not returning column metadataH2oApi Java绑定列端点不返回列元数据
【发布时间】:2017-10-30 17:45:32
【问题描述】:

我们正在使用 H2O 3.10.4.7 开发 Java 程序,我们需要检索有关框架中所有列的元数据,例如列名和数据类型。相关问题(未解决,不同问题)here.

我们的期望是 water.bindings.H2oApi 客户端就像 REST 端点一样工作,我们希望使用 Javadoc 中描述的 H2oApi 方法 frameColumns(FrameKeyV3 frameId)

“返回一个框架中的所有列。”

但结果不包含任何与列相关的信息。 当我们通过浏览器使用 REST 端点时,我们会像预期的那样获得有关框架中列的详细信息。例子:

H2oApi:

FramesV3 params = new FramesV3();
params.frameId = stringToKey(frame, FrameKeyV3.class); // "frame" reference from import process, works

// try with frameColumns()
FramesV3 frameColumns = api.frameColumns(params);
System.out.println(frameColumns.toString()); // "columns" not included in JSON response

结果:

{
   "column":"",
   "row_offset":0,
   "row_count":0,
   "column_offset":0,
   "column_count":0,
   "find_compatible_models":false,
   "path":"",
   "force":false,
   "num_parts":1,
   "frames":[
      {
         "frame_id":{
            "name":"3d257aae-7266-48a1-8f35-1243436616ab",
            "type":"Key\u003cFrame\u003e",
            "URL":"/3/Frames/3d257aae-7266-48a1-8f35-1243436616ab"
         },
         "byte_size":1928,
         "is_text":false,
         "_exclude_fields":""
      }
   ],
   "_exclude_fields":""
}

REST 端点:

http://localhost:54321/3/Frames/3d257aae-7266-48a1-8f35-1243436616ab/columns

结果:

{

    "__meta": {
        "schema_version": 3,
        "schema_name": "FramesV3",
        "schema_type": "Frames"
    },
    "_exclude_fields": "",
    "row_offset": 0,
    "row_count": 0,
    "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": "3d257aae-7266-48a1-8f35-1243436616ab",
                "type": "Key<Frame>",
                "URL": "/3/Frames/3d257aae-7266-48a1-8f35-1243436616ab"
            },
            "byte_size": 1928,
            "is_text": false,
            "row_offset": 0,
            "row_count": 100,
            "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": [ ... ]
            "string_data": null,
            "precision": 1,
            "histogram_bins": null,
            "histogram_base": 0.0,
            "histogram_stride": 0.0,?
            "percentiles": null
    ...
}

我们对 JSON 实体“列”感兴趣以检索我们需要的元数据,但 H2o Java Api 不提供它。

最好的问候!

尼哥

【问题讨论】:

  • 这可能是我们toString 中的一个“错误”,您可以试试((FrameV3)(frameColumns.frames[0])).columns[0].label 吗?
  • 我试过 FramesV3 frameColumns = api.frameColumns(params); System.out.println(((FrameV3)(frameColumns.frames[0])).columns[0].label); 导致这个异常:java.lang.AssertionError: water.bindings.pojos.FrameBaseV3 cannot be cast to water.bindings.pojos.FrameV3
  • 这是有道理的,因为 water.bindings.pojos.FrameV3 扩展了 water.bindings.pojos.FrameBaseV3 而不是相反。 FrameBaseV3 似乎在 water.bindings.pojos.FramesV3 中被 Retrofit 用于对象映射,并且不包含列。所以我猜只要H2oApi 方法返回water.bindings.pojos.FramesV3 类型的对象和water.bindings.pojos.FrameBaseV3 数组作为Frame 引用,列将永远不会包含在结果中。
  • yes FrameV3 extends FrameBaseV3 这就是为什么你可以做 FrameBaseV3 x = new FrameV3() 但是如果你想从 FrameV3 类中获取字段,你需要强制转换并且如果底层对象确实是它应该工作FrameV3。在这种情况下,就像您说的那样,Retrofit 似乎将 FrameBaseV3 的实例放入了 frames 变量中,这就是强制转换失败的原因。在后端,我们正在正确设置它(这就是您通过 curl 获得正确响应的原因)。猜猜这是一个错误,你应该在我们的 JIRA 上打开一个问题。真的很高兴有人开始使用 Java API :-)

标签: java h2o


【解决方案1】:

正如 cmets 中所述 - 这似乎是与我们使用 Retrofit 的方式有关的错误,请创建问题 in our JIRA。你可以在里面指向这个Retrofit issue。当然也请在 H2O-3 gitter 频道上发布 JIRA 链接。

【讨论】:

    猜你喜欢
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    相关资源
    最近更新 更多