特に、質問の対象となる両方のツールの作成者によるすばらしい回答があります。Mattの回答は、質問で報告されたケースを説明しています。これは、マージアルゴリズムではなく、バグによって引き起こされたものです。バグは翌日、7年以上前に修正されました。
私の答えでは、data.tableとpandasのマージ操作のいくつかの最新のタイミングを提供します。plyrとbase Rマージは含まれていないことに注意してください。
私が提示しているタイミングは、継続的に実行される再現可能なベンチマークであるdb-benchmarkプロジェクトからのものです。ツールを最新バージョンにアップグレードし、ベンチマークスクリプトを再実行します。他の多くのソフトウェアソリューションを実行します。Sparkに興味がある場合は、Daskや他のいくつかのリンクを確認してください。
現在のところ...(まだ実装されていません:データサイズが1つ増え、質問が5つ増えます)
LHSテーブルの2つの異なるデータサイズをテストします。
これらのデータサイズごとに、5つの異なるマージ質問を実行します。
Q1:LHS内側はRHS-参加小 整数に
Q2:LHS内側整数でRHS媒体に参加
Q3:LHS 外側は整数でRHS媒体に参加
Q4:LHS内側が上RHS媒体を結合因子(カテゴリ)
Q5:LHSインナーRHS-に参加します 整数に 大きな
RHSテーブルには3つのサイズがあります
- smallはLHS / 1e6のサイズに変換されます
- 媒体はLHS / 1e3のサイズに変換されます
- bigはLHSのサイズに変換されます
すべてのケースで、LHSとRHSの間で一致する行の約90%があり、RHS結合列に重複はありません(デカルト積はありません)。
現在(2019年11月2日に実行)
2019年11月1日にリリースされたパンダ0.25.3
data.table 0.12.7(92abb70)が2019年11月2日にリリースされました
LHSの2つの異なるデータサイズについて、以下のタイミングは秒単位です。列にpd2dt
は、パンダがdata.tableよりも遅い回数の比率を格納するフィールドが追加されています。
+-----------+--------------+----------+--------+
| question | data.table | pandas | pd2dt |
+-----------+--------------+----------+--------+
| q1 | 0.51 | 3.60 | 7 |
| q2 | 0.50 | 7.37 | 14 |
| q3 | 0.90 | 4.82 | 5 |
| q4 | 0.47 | 5.86 | 12 |
| q5 | 2.55 | 54.10 | 21 |
+-----------+--------------+----------+--------+
+-----------+--------------+----------+--------+
| question | data.table | pandas | pd2dt |
+-----------+--------------+----------+--------+
| q1 | 6.32 | 89.0 | 14 |
| q2 | 5.72 | 108.0 | 18 |
| q3 | 11.00 | 56.9 | 5 |
| q4 | 5.57 | 90.1 | 16 |
| q5 | 30.70 | 731.0 | 23 |
+-----------+--------------+----------+--------+
data.table
から継承するだけですが、内部data.frame
ではCコードに依存しています。