2

我是 Python、PyTables 和 HDF5 的新手。我正在为我的问题寻找简单和最佳的解决方案。

接下来是问题。一方面,我有许多带有数据的 XML 文件。我只想解析这些文件并将数据放在另一端的 hdf5 文件中。稍后,我将通过一些搜索条件使用这些数据。为什么是 HDF5?因为需要放置大型数据集并且因为速度。使用 RDBMS 会在 JOIN 操作期间产生性能问题。解决方案必须提供速度和良好的内存性能。

经过一番谷歌搜索后,我发现 Python 和 PyTables 是可能的解决方案。我的想法是在 Java 中解析 XML 中的数据(此代码必须用 Java 编写),然后编写 python 脚本,使用 PyTables API 在 hdf5 中插入数据并从 Java 执行 python 脚本。所以,我正在从 Java 程序编写和执行 python 脚本。为了在 Java 中编写 python 脚本,我使用 java.io.* 包并在 Java 中执行 Process 类。例如:

p.exec("cmd /c C:\MyScripts\myscript.py")

我不知道这个解决方案好不好。对我来说,使用 java.io.* 从 Java 编写脚本并不酷。可能,我稍后在从脚本读取结果时会遇到问题(当我使用 Python 脚本和 PyTables API 制定一些搜索条件时)。

所以,我对我的问题没有几个问题。在一侧解析 XML 数据并将数据存储在另一侧的 hdf5 之间的最佳解决方案是什么?我对这个解决方案的正确方式(从 Java 代码编写和执行 python 脚本)?Python 和 PyTables 呢?这些技术能很好地解决我的问题吗?我还阅读了一些关于 Jython 的内容,但我不知道是否可以将它与 PyTables 结合使用?

欢迎专业人士提出意见和建议。感谢您的帮助。

4

2 回答 2

3

对我来说,使用java.io.*.

这里也一样——你已经将 XML 中的数据解析为 Java 中的某种内部表示,然后将这些数据重新写入 Python 脚本,然后 Python 解释器会将数据重新解析为内部表示以进行编写到 HDF5 文件。它将 Java XML 解析接口、XML 数据格式和用于操作 HDF5 文件的 Python API 耦合在一起,这听起来像是比应有的更多移动部分。(你真的想打破javac只是为了更新一个重命名的 Python 包吗?)

我认为值得再退一步,看看问题的两个步骤:

  • 解析 XML
  • 写 HDF5

没有理由在它们之间应该有两种语言——我会完全坚持使用 Java 或完全使用 Python。最终结果将在更多系统上以更少的内存运行得更快,并且无论您选择哪种语言都更易于维护。

于 2012-01-18T02:23:27.383 回答
2

我从事的一个项目是我解析了大约 60 000 个 Python cPickle 文件并将内容(大约 31k 行和 4 列的矩阵)放入单独的 PyTables 表中。它的工作原理和性能非常好。

但我同意萨诺德的观点。无论您拥有最丰富的经验和最熟悉的方式,我都会坚持使用 java 或 python。我确实认为使用 python 和 pytables 更容易获得结果,尤其是在编写导入脚本时。

顺便说一句,您想从 java 运行 python 脚本的原因是什么?为什么不直接运行python脚本呢?

顺便说一句,还有比 PyTables 更底层的 python h5py包。PyTables 实际上在 HDF5 之上构建了一个额外的抽象层。例如,PyTables 具有表的概念,类似于 RDBMS 中的表并支持索引(HDF5 开箱即用不支持两者)

从理论上讲,您可以从 Java 中读取使用 PyTables 创建的 HDF5 文件。但是,您不会对所有 PyTable 功能(如表和索引)提供开箱即用的支持。
除此之外,如果您在 PyTables 中使用Blosc压缩算法,您可能根本无法在 Java 中加载它。

于 2012-01-18T20:20:39.697 回答