2012-01-18 18 views
2

私はPython、PyTables、HDF5の初心者です。私は私の問題のためのシンプルで最高のソリューションを探しています。Java、Python、PyTables、HDF5を組み合わせるためのシンプルで効果的なソリューション

問題は次にあります。一方では、私はデータを持つ多くのXMLファイルを持っています。私はこれらのファイルを解析し、反対側のhdf5ファイルにデータを入れたいだけです。後で、私はいくつかの検索条件でこのデータを使用します。なぜHDF5ですか?多くのデータセットを置く必要があるため、速度が必要です。 RDBMSを使用すると、JOIN操作中にパフォーマンスに問題が発生します。解決策は、スピードと良好なメモリ性能を提供しなければならない。

私はPythonとPyTablesの可能な解決策を見つけました。私のアイデアはPyTables APIを使ってhdf5にデータを挿入し、PythonスクリプトをJavaから実行するPythonスクリプトを書いた後、JavaのXML(このコードはJavaで書かれている必要があります)ですから、私はJavaプログラムからPythonスクリプトを作成して実行しています。 JavaでPythonスクリプトを書くために、私はjava.io. * packageを使用していて、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

曖昧さから、なぜXMLコードをJavaで記述する必要がありますか? Pythonには、多くの優れたxmlパース/ライティングライブラリがあります。本当にPyTablesを使いたいのであれば、すべてをPythonに移す方が簡単かもしれません... –

+0

はい、大丈夫です。私はそれについて考えなかったので、Pythonで多くの経験を持っていない。また、私は大きなプロジェクトの小さな部分に取り組んでいます。私はパーソン解析にPythonを使用する権限があるのか​​どうかはわかりませんが、問題ではないと思います。アドバイスをありがとう。 –

答えて

3

私にとっては、java.io.*を使用してJavaからスクリプトを書くのは面白くありません。

同じです - 既にXMLのデータをJavaの内部表現に解析してからこのデータをPythonスクリプトに書き直してから、Pythonインタプリタがデータを再解析しますHDF5ファイルへの書き込みのための内部表現に変換します。これは、Java XML解析インターフェイス、XMLデータフォーマット、Python APIの両方を組み合わせて、HDF5ファイルを操作します。これは、動く部分のように聞こえるはずです。 (あなた本当にはちょうど名前を変更したPythonパッケージを更新するためにjavacを抜け出すしますか?)

私はそれが逆方向に別の一歩を踏み出し価値があると、問題の二つのステップを見てみたいと思う:

  • 解析XML
  • 書き込みHDF5

これらの間に2つの言語があるはずない理由はありません - 私は、JavaまたはすべてPythonで完全にこだわると思います。最終結果は、より多くのシステムでより少ないメモリー量でより速く実行され、どの言語を選択してもより保守性が向上します。

+0

私が前に述べたように、HDF5の経験はありません。たぶん、PyTablesの代わりにHDF5用のいくつかのJAVA APIを使う方が良い解決策かもしれませんが、PythonとPyTablesを使用するのと同じパフォーマンスを提供するのか分かりません。私はHDF5でデータを使って多くのクエリを作成する予定であり、そのためのスピードが必要であることに注意してください。だから、Java API for HDF5やPyTables?よりよい解決策は何ですか?または、他の何か? –

+0

最も便利なツールを使用してデータをHDF5に変換したら、最も便利な言語を使用して_queries_を書き留めてください。あなたは完全にJavaでインポータを書くことができ、Pythonでクエリを完全に書くことができます。つまり、2つを1つのプログラムに組み合わせることで、残りの半分のスクリプトを作成することができます。 – sarnold

2

プロジェクトでは、60,000個のPython cPickleファイルを解析し、内容(約31k行と4列の行列)を別々のPyTablesテーブルに入れました。 本当にうまく動作します。

しかし、私はsarnoldに同意します。私は、あなたが最も経験が豊富で、最も快適であれば、JavaまたはPythonに固執するでしょう。私は、特にインポートスクリプトを書くとき、pythonとpytablesで結果を得る方が簡単だと思います。

私はあなたがJavaからpythonスクリプトを実行したい理由は何ですか?なぜpythonスクリプトを直接実行しないのですか?

ところでPyTablesよりも低レベルのpython h5pyパッケージもあります。 PyTablesは実際にHDF5の上に追加の抽象レイヤーを構築します。たとえば、PyTablesはRDBMSのテーブルと似ていて、インデックスをサポートするテーブルのコンセプトを持っています(どちらもHDF5でサポートされていません)

理論上、JavaからPyTablesで作成されたHDF5ファイルを読むことができます。しかし、テーブルやインデックスのようなPyTableのすべての機能をサポートしているわけではありません。
PyTablesでBlosc圧縮アルゴリズムを使用すると、Javaでまったく読み込めない場合があります。

+0

Javaのxmlファイルを解析するときに、hdf5にデータを挿入するスクリプトを実行する必要があります。たぶん、より良い解決策は、pythonでXMLファイルを解析し、すべてのプロセスからJavaを除外ですか?私はPythonをよく知らないので、XMLを解析するためにJavaを使用することにしましたが、私が把握することは問題ではありません。それ以外の場合は、私はデータを読み込むときに私は多くの異なるクエリを行います。私の計画は、hdf5のデータを分析に使用することです。昨日私はJava HDF5 APIについて読んだが、私は機能に満足していない。 PyTablesは、データの探索と検索のための簡単で素敵なAPIを提供します。また、より迅速に。 –

+1

pythonとpytablesを使用することをお勧めします。 PythonでXMLのパーサーを書くのはとても簡単ですが、pytablesのAPIはとても便利です。たとえば、pytablesと一緒にipythonを使用するとコード補完ができ、何の努力もなくhdf5をナビゲートできます。クエリを作成した場合、pytables 2.3を使用することを確認します。これは、クエリのパフォーマンスをかなり向上させるインデックスの作成をサポートしているからです。また、巨大なデータを持っている場合は、圧縮を使用することをお勧めします(bloscが望ましい)。これにより、パフォーマンスをさらに向上させることができます。 –

+0

私はこれを検討します。アドバイスをありがとう。 –

関連する問題