私は、idx
という名前の列を持ついくつかのファイルがあります。インデックスとして使用したいと思います。得られたデータフレームは約13M行あります。私は(40ミリ秒〜速いです)データフレームの既知の分け目とパフォーマンス
df = dd.read_parquet("file-*.parq", index = "idx")
簡単な操作
df = dd.read_parquet("file-*.parq")
df = df.set_index("idx")
またはこれ以外の方法で、私は(〜遅くなる40秒)このようにインデックスを読み、割り当てることができることを知っています2番目の方法で長さを計算すると〜4倍高速です。私は理解していないと、第二のdf.known_divisions
リターンTrue
しばらく最初のケースに
- ある
False
です。私は反対の行動を期待した。私はその後、df
の上にいくつかの操作を行いました。私はいつもより良いパフォーマンスを得ています。私はこれが意図的に起こっているかどうかを知るために頭を悩ましています。 - パーティション数はファイル数です。別の数のパーティションを設定するにはどうしたらいいですか?
UPDATE はそれだけで速くなるlen
を計算されていません。私の計算では、私はGROUPBYを使用して4つの新しいデータフレームを作成し、いくつかの回を適用し、参加し、これらは、あなたが最初のメソッドを使用する場合
| |Load and reindex (s)|Load with index (s)|
|:-----------------|-------------------:|------------------:|
| load | 12.5000 | 0.0124 |
| grp, apply, join | 11.4000 | 6.2700 |
| compute() | 146.0000 | 125.0000 |
| TOTAL | 169.9000 | 131.2820 |
更新:これは、シャッフル時間のコストを償却するために1つの計算で複数の計算を行った場合と、シャッフルのメモリコストが何である場合でも、あなたのgroupbyなどが正確に何であるかによって異なります。多くの場合、作業に十分なRAMがあれば、set_indexの後に持続することを選択することがあります。 – mdurant
私は持続を確認し、パフォーマンスについてより具体的な質問をします。 – user32185