我是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结合起来?
欢迎专业人士提出意见和建议。谢谢你的帮助。
答案 0 :(得分:3)
对于我而言,使用
java.io.*
从Java编写脚本并不酷。
相同 - 你已经将XML中的数据解析为Java中的一些内部表示,然后将这些数据重写为Python脚本,然后Python解释器将数据重新解析为内部写入HDF5文件的表示。它将Java XML解析接口,XML数据格式和用于操作HDF5文件的Python API结合在一起,这听起来比应有的更加动人。 (你真的想要突破javac
只是为了更新重命名的Python包吗?)
我认为值得向后退一步,看一下问题的两个步骤:
没有理由说它们之间应该有两种语言 - 我完全坚持使用Java或完全使用Python。无论您选择哪种语言,最终结果都会在更多系统上的内存中运行得更快,并且更易于维护。
答案 1 :(得分:2)
我参与了一个项目,我解析了大约6万个Python cPickle文件,并将内容(大约31k行和4列的矩阵)放入单独的PyTables表中。 它的工作和表现非常好。
但我同意sarnold。我会坚持使用java或python,无论你有什么经验并且最舒服。我认为使用python和pytables获取结果更容易,尤其是在编写导入脚本时。
BTW你想从java运行python脚本的原因是什么?为什么不直接运行python脚本?
BTW还有python h5py包,它比PyTables更低级别。 PyTables实际上在HDF5之上构建了一个额外的抽象层。例如,PyTables具有表的概念,类似于RDBMS中的表并支持索引(HDF5不支持开箱即用)
理论上,您可以读取使用Java中的PyTables创建的HDF5文件。但是,您不会对表和索引等所有PyTable功能提供开箱即用的支持 除此之外,如果您在PyTables中使用Blosc压缩算法,则可能根本无法在Java中加载它。