Có những câu trả lời tuyệt vời, đáng chú ý được thực hiện bởi các tác giả của cả hai công cụ mà câu hỏi hỏi về. Câu trả lời của Matt giải thích trường hợp được báo cáo trong câu hỏi, rằng đó là do lỗi và không phải là thuật toán hợp nhất. Lỗi đã được sửa vào ngày hôm sau, hơn 7 năm trước.
Trong câu trả lời của tôi, tôi sẽ cung cấp một số thời gian cập nhật của hoạt động hợp nhất cho data.table và gấu trúc. Lưu ý rằng không bao gồm plyr và cơ sở R hợp nhất.
Thời gian tôi đang trình bày đến từ dự án chuẩn db , một điểm chuẩn có thể lặp lại chạy liên tục. Nó nâng cấp các công cụ lên các phiên bản gần đây và chạy lại các kịch bản chuẩn. Nó chạy nhiều giải pháp phần mềm khác. Nếu bạn quan tâm đến Spark, Dask và một vài người khác hãy chắc chắn kiểm tra liên kết.
Đến bây giờ ... (vẫn sẽ được triển khai: thêm một kích thước dữ liệu và 5 câu hỏi nữa)
Chúng tôi kiểm tra 2 kích thước dữ liệu khác nhau của bảng LHS.
Đối với mỗi kích thước dữ liệu đó, chúng tôi chạy 5 câu hỏi hợp nhất khác nhau.
q1: LHS bên tham gia RHS- nhỏ trên nguyên
q2: LHS bên tham gia RHS-vừa về nguyên
q3: LHS ngoài tham gia RHS-vừa về nguyên
q4: LHS bên tham gia RHS-trung vào yếu tố (phân loại)
q5: LHS bên tham gia RHS- lớn về số nguyên
Bảng RHS có 3 kích cỡ khác nhau
- dịch nhỏ theo kích thước của LHS / 1e6
- phương tiện chuyển thành kích thước của LHS / 1e3
- lớn dịch theo kích thước của LHS
Trong tất cả các trường hợp, có khoảng 90% các hàng khớp giữa LHS và RHS và không có bản sao nào trong cột tham gia RHS (không có sản phẩm cartesian).
Tính đến thời điểm hiện tại (chạy vào ngày 2 tháng 11 năm 2019)
pandas 0.25.3 được phát hành vào ngày 1 tháng 11 năm 2019
data.table 0.12.7 (92abb70) được phát hành vào ngày 2 tháng 11 năm 2019
Thời gian dưới đây tính bằng giây, cho hai kích thước dữ liệu khác nhau của LHS. Cột pd2dt
được thêm tỷ lệ lưu trữ trường về số lần gấu trúc chậm hơn 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
chỉ thừa hưởng từdata.frame
, nhưng nó dựa vào mã C dưới mui xe.