【发布时间】: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的完整数据。有什么建议吗?