1

そのため、Pandas DataFrames を HDF5 に保存しようとすると、奇妙なエラーが発生しますが、一貫性がありません。少なくとも半分の時間で、読み取り-プロセス-移動-書き込みサイクルの一部が失敗し、多くの場合、「HDF5 読み取りエラー」よりも明確な説明はありません。さらに悪いことに、ダウンストリームまで物事を止めない意味のないデータや破損したデータでテーブルが終了することがあります。値が桁違いにずれている (正しい値と相関していない) か、意味をなさない日付のいずれかです。 (最近のデータは 1750 年代の日付であると誤ってマークされています...など)。

現在のプロセスを経て、問題を引き起こしている可能性があると思われるものが役立つと思いました. 外観は次のとおりです。

  1. いくつかのテーブル (「QUERY1」と「QUERY2」と呼ぶ) を読んで、それらが最新かどうかを確認し、最新でない場合は、
  2. HDF5ストアにあったテーブルを「QUERY1」として取得し、代わりにHDF5ストアに「QUERY1_YYYY_MM_DD」として保存します
  3. そのテーブルの外部データベースで関連するクエリを実行します。それぞれは、1980 年までさかのぼる 100 から 1500 列の毎日のデータです。
  4. クエリ 1 の結果を新しい "QUERY1" として HDF5 ストアに格納します。
  5. 階層 (Pandas MultiIndex) 列を持つ QUERY1、QUERY2、...QUERYn の 1 つ以上の変換をいくつか計算します。アイテム「Derived_Frame1」などを HDF5 ストアの更新/置換で上書きします
  6. Windows ネットワーク ドライブ上の関連する .h5 ファイルにアクセスできる複数のユーザーが、このルーチンを実行します。通常はそうではありませんが、同時に実行される可能性があります。

問題の一部である可能性があると思われるいくつかのこと:

  • df.to_hdf(store, key)を使用して「テーブル」形式を主張する代わりに、デフォルト形式 ( ) を使用しますdf.to_hdf(store, key, format='table'))。%timeitによると、デフォルトのフォーマットは読み取りと書き込みの両方で2倍から5倍高速であるため、これを行います

  • ネットワーク ドライブを使用して、複数のユーザーがこのルーチンを実行し、少なくとも派生フレームにアクセスできるようにします。この要件について、特に派生データフレームへの読み取りアクセスについては、いつでもできることはあまりありません。

  • ドキュメントから、HDF5ストア内のアイテムを繰り返し削除して再書き込みすると、奇妙なことが起こる可能性があるようです(少なくともファイルサイズを徐々に増やしますが、他に何があるかはわかりません)。たぶん、クエリのアーカイブを別のファイルに保存する必要がありますか? たぶん、更新時にメインファイル全体をnukingして置き換える必要がありますか?

  • そもそも HDF5 に MultiIndex 列を含むデータフレームを格納する - これが、デフォルトの形式で「警告」を表示するようですが、使用すると警告が消えるようですformat='table'

  • 編集:上記のルーチンを実行しているさまざまなユーザーが、さまざまなバージョンの Pandas とさまざまなバージョンの PyTables を使用している可能性もあります。

何か案は?

4

0 に答える 0