如何在JAVA中使用HDFql获取数据集中的字符串类型数据?
How to obtain a string type data in a dataset with HDFql in JAVA?
我是 HDF5 和 HDFql 的新手,我在 java 工作,我有一个包含多个组的 .h5 文件,在每个组中我有不同的数据集,有些是浮动数组,我得到如下。
https://gyazo.com/c10100b327d20a2db8c13f2fd9ab7668
Double[][] values = new Double[numRow][numCol];
HDFql.variableRegister(values);
HDFql.execute("SELECT FROM "+gName+"/"+dName+" INTO MEMORY "+HDFql.variableGetNumber(values));
HDFql.variableUnregister(values);
当我有一个变量为 1 行 1 列且数据类型为字符串的数据集时,就会出现问题。
https://gyazo.com/2622693aee83d9eba5487a053ba9247c
我尝试执行以下代码,但收到以下错误消息
String[] val = new String[10];
HDFql.variableRegister(val);
HDFql.execute("SELECT FROM "+gName+"/"+dName+" INTO MEMORY "+HDFql.variableGetNumber(val));
HDFql.variableUnregister(val);
和
String val = "";
HDFql.variableRegister(val);
HDFql.execute("SELECT FROM "+gName+"/"+dName+" INTO MEMORY "+HDFql.variableGetNumber(val));
HDFql.variableUnregister(val);
控制台显示的错误是:
A fatal error has been detected by the Java Runtime Environment:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006da2f270,
pid=42048, tid=0x00000000000089d4
JRE version: Java(TM) SE Runtime Environment (8.0_211-b12) (build
1.8.0_211-b12) Java VM: Java HotSpot(TM) 64-Bit Server VM (25.211-b12 mixed mode windows-amd64 compressed oops) Problematic frame: V
[jvm.dll+0x27f270]
Failed to write core dump. Minidumps are not enabled by default on
client versions of Windows
An error report file with more information is saved as:
C:\Users\us\AppData\Local\Temp\hs_err_pid42048.log
If you would like to submit a bug report, please visit:
http://bugreport.java.com/bugreport/crash.jsp
欢迎任何帮助,非常感谢
即使数据集只有一个元素(在您的例子中,1 行 x 1 列),您仍然需要将变量(您注册以存储数据)声明为数组。换句话说,声明和创建变量 val
如下:
String val[] = new String[1];
此外,请查看 HDFql reference manual 中的第 5.2.51 节以了解您可以在 Java.
中注册什么类型的变量(使用方法 variableRegister
)
抱歉,我的回答延迟了。
问题依然存在,我找到了访问 1 Row x 1 Col 变量的方法。但是,问题似乎是另一个。
我有一个实现 HDFql 调用的方法,如下所示。
https://gyazo.com/c3bc1e4e568cb4277607fa21ea71445f
如果我从 class 构造函数调用 2 次方法
https://gyazo.com/9dee4e0b9a0ea69e73089b2802dbdad9
工作正常,结果我得到了我咨询过的两个数据集。
https://gyazo.com/40e4485408fe08e7cf9a1ad8baf97a9d
https://gyazo.com/372fc6cb991992e82340325dfd0b548d
但是,当我尝试 运行 单击按钮时对侦听器使用相同的方法。
https://gyazo.com/928ee0b90e8b864fe6908b79e56da7a7
https://gyazo.com/f8c044e298208fa9f94c8be7bc5e1de3
Java发生错误,我将内存堆增加到最大8Gb,并在完成查询后释放HDFql的所有变量,但错误仍然存在。我不明白为什么如果调用是从构造函数进行的,即使它是几个连续的调用,它也有效,相反,如果调用是从构造函数以外的方法进行的,则返回下一个错误。
*
Java 运行时环境检测到致命错误:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) 在 pc=0x0000000054f6f1c2,pid=137068,tid=0x0000000000014d88
JRE 版本:Java(TM) SE Runtime Environment (8.0_211-b12) (build 1.8.0_211-b12)
Java VM:Java HotSpot(TM) 64 位服务器 VM(25.211-b12 混合模式 windows-amd64 压缩 oops)
有问题的框架:
V[jvm.dll+0x15f1c2]
无法写入核心转储。 Windows
的客户端版本默认不启用小型转储
包含更多信息的错误报告文件保存为:
C:\Users\Code\AppData\Local\Temp\hs_err_pid137068.log
如果您想提交错误报告,请访问:
http://bugreport.java.com/bugreport/crash.jsp
崩溃发生在本机代码的 Java 虚拟机之外。
请参阅有问题的框架以了解在何处报告错误。
*
我正在使用 Vaadin 框架开发 Web 应用程序,我没有创建任何线程,但我认为当用户与浏览器的组件(按钮、组合框等)交互时,该框架可能会创建线程).我已经尝试 运行 构造函数中的方法,当您导航到该视图时 运行s,第一次导航它工作正常,但是,当您 return 导航或刷新网页无法访问。这就像 HDFql 正在缓存或保存以前访问的内存地址,当您再次浏览或单击按钮时,某些变量将更改其内存指针,而不是使用新指针,HDFql 正在尝试重用以前的内存地址。
我是 HDF5 和 HDFql 的新手,我在 java 工作,我有一个包含多个组的 .h5 文件,在每个组中我有不同的数据集,有些是浮动数组,我得到如下。 https://gyazo.com/c10100b327d20a2db8c13f2fd9ab7668
Double[][] values = new Double[numRow][numCol];
HDFql.variableRegister(values);
HDFql.execute("SELECT FROM "+gName+"/"+dName+" INTO MEMORY "+HDFql.variableGetNumber(values));
HDFql.variableUnregister(values);
当我有一个变量为 1 行 1 列且数据类型为字符串的数据集时,就会出现问题。 https://gyazo.com/2622693aee83d9eba5487a053ba9247c
我尝试执行以下代码,但收到以下错误消息
String[] val = new String[10];
HDFql.variableRegister(val);
HDFql.execute("SELECT FROM "+gName+"/"+dName+" INTO MEMORY "+HDFql.variableGetNumber(val));
HDFql.variableUnregister(val);
和
String val = "";
HDFql.variableRegister(val);
HDFql.execute("SELECT FROM "+gName+"/"+dName+" INTO MEMORY "+HDFql.variableGetNumber(val));
HDFql.variableUnregister(val);
控制台显示的错误是:
A fatal error has been detected by the Java Runtime Environment:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006da2f270, pid=42048, tid=0x00000000000089d4
JRE version: Java(TM) SE Runtime Environment (8.0_211-b12) (build 1.8.0_211-b12) Java VM: Java HotSpot(TM) 64-Bit Server VM (25.211-b12 mixed mode windows-amd64 compressed oops) Problematic frame: V [jvm.dll+0x27f270]
Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
An error report file with more information is saved as: C:\Users\us\AppData\Local\Temp\hs_err_pid42048.log
If you would like to submit a bug report, please visit:
http://bugreport.java.com/bugreport/crash.jsp
欢迎任何帮助,非常感谢
即使数据集只有一个元素(在您的例子中,1 行 x 1 列),您仍然需要将变量(您注册以存储数据)声明为数组。换句话说,声明和创建变量 val
如下:
String val[] = new String[1];
此外,请查看 HDFql reference manual 中的第 5.2.51 节以了解您可以在 Java.
中注册什么类型的变量(使用方法variableRegister
)
抱歉,我的回答延迟了。
问题依然存在,我找到了访问 1 Row x 1 Col 变量的方法。但是,问题似乎是另一个。
我有一个实现 HDFql 调用的方法,如下所示。 https://gyazo.com/c3bc1e4e568cb4277607fa21ea71445f
如果我从 class 构造函数调用 2 次方法 https://gyazo.com/9dee4e0b9a0ea69e73089b2802dbdad9 工作正常,结果我得到了我咨询过的两个数据集。 https://gyazo.com/40e4485408fe08e7cf9a1ad8baf97a9d https://gyazo.com/372fc6cb991992e82340325dfd0b548d
但是,当我尝试 运行 单击按钮时对侦听器使用相同的方法。 https://gyazo.com/928ee0b90e8b864fe6908b79e56da7a7 https://gyazo.com/f8c044e298208fa9f94c8be7bc5e1de3
Java发生错误,我将内存堆增加到最大8Gb,并在完成查询后释放HDFql的所有变量,但错误仍然存在。我不明白为什么如果调用是从构造函数进行的,即使它是几个连续的调用,它也有效,相反,如果调用是从构造函数以外的方法进行的,则返回下一个错误。
* Java 运行时环境检测到致命错误:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) 在 pc=0x0000000054f6f1c2,pid=137068,tid=0x0000000000014d88
JRE 版本:Java(TM) SE Runtime Environment (8.0_211-b12) (build 1.8.0_211-b12) Java VM:Java HotSpot(TM) 64 位服务器 VM(25.211-b12 混合模式 windows-amd64 压缩 oops) 有问题的框架: V[jvm.dll+0x15f1c2]
无法写入核心转储。 Windows
的客户端版本默认不启用小型转储包含更多信息的错误报告文件保存为: C:\Users\Code\AppData\Local\Temp\hs_err_pid137068.log
如果您想提交错误报告,请访问: http://bugreport.java.com/bugreport/crash.jsp 崩溃发生在本机代码的 Java 虚拟机之外。 请参阅有问题的框架以了解在何处报告错误。 *
我正在使用 Vaadin 框架开发 Web 应用程序,我没有创建任何线程,但我认为当用户与浏览器的组件(按钮、组合框等)交互时,该框架可能会创建线程).我已经尝试 运行 构造函数中的方法,当您导航到该视图时 运行s,第一次导航它工作正常,但是,当您 return 导航或刷新网页无法访问。这就像 HDFql 正在缓存或保存以前访问的内存地址,当您再次浏览或单击按钮时,某些变量将更改其内存指针,而不是使用新指针,HDFql 正在尝试重用以前的内存地址。