メモリより大きいデータセットの問題を解決しています。元のデータセットは .csv ファイルです。列の 1 つは、musicbrainz サービスからのトラック ID 用です。
私がすでにしたこと
.csv ファイルをdaskで読み取り、パフォーマンスを向上させるためにディスク上でcastra形式に変換しました。また、musicbrainz API にクエリを実行し、 peewee を使用して sqlite DB にいくつかの関連する結果を入力しました。プロセスに数日かかり、障害が発生した場合にデータを失いたくなかったため、別の dask.dataframe の代わりに DB を使用することにしました。
私はまだデータを実際に分析し始めていませんでした。データの再配置中になんとか十分な混乱を引き起こしました。
現在の問題
SQL DB から dask / castra データフレームに列を結合するのに苦労しています。実際、これが実行可能かどうかはわかりません。
代替アプローチ
タスクに最適なツールを選択する際にいくつかの間違いを犯したようです. カストラはおそらく十分に成熟しておらず、それが問題の一部だと思います. さらに、pandas と peewee's not で使用されているため、peewee を優先して SQLAlchemy を選択する方が良い場合があります。
Blaze + HDF5 は、dask + castra の優れた代替手段として機能する可能性があります。これは主に、HDF5 が castra よりも安定性/成熟度/完全性が高く、blaze がデータ ストレージに関する意見が少ないためです。たとえば、SQL DB のメイン データセットへの結合を簡素化できます。
一方、私は pandas に精通しており、dask は「同じ」API を公開しています。dasを使用すると、並列処理も得られます。
TL;DR
メインのデータセットに参加する必要がある、メモリ データセット + sqlite DB よりも大きなデータセットがあります。dask + castra (dask.dataframe に関連する他のデータ ストアがわからない) を使用し、SQLAlchemy を使用して SQL DB の一部を一度に pandas のデータフレームにロードするかどうかは疑問です。私が考える最良の代替案は、代わりにブレイズ + HDF5 に切り替えることです。この場合、あなたは何を提案しますか?
その他のオプション/意見は大歓迎です。これがSOにとって十分に具体的であることを願っています。