2011-09-21 13 views

Trả lời

12

Không có sự khác biệt lớn về hiệu suất. Lý do tôi nói điều này là cả hai kết thúc là một công việc MapReduce duy nhất mà gửi cùng một dữ liệu chuyển tiếp đến các bộ giảm tốc. Cả hai cần phải gửi tất cả các bản ghi về phía trước với khóa là khóa ngoại. Nếu có, thì COGROUP có thể nhanh hơn một chút vì nó không làm sản phẩm Descartes trên các lần truy cập và giữ chúng trong các túi riêng biệt.

Nếu một trong các tập dữ liệu của bạn nhỏ, bạn có thể sử dụng tùy chọn tham gia được gọi là "replicated join". Điều này sẽ phân phối tập dữ liệu thứ hai trên tất cả các tác vụ bản đồ và tải nó vào bộ nhớ chính. Bằng cách này, nó có thể làm toàn bộ tham gia trong người lập bản đồ và không cần một bộ giảm tốc. Theo kinh nghiệm của tôi, điều này rất đáng giá vì nút cổ chai trong các kết nối và các nhóm là việc xáo trộn toàn bộ tập dữ liệu vào bộ giảm tốc. Bạn không thể làm điều này với COGROUP, với kiến ​​thức của tôi.

+0

Nội bộ, tham gia và nhóm là cùng một điều trong Pig (và không có tham gia cartesian xảy ra trong tham gia, không chắc chắn những gì bạn có ý nghĩa ở đó). Chỉ định dạng của kết quả cuối cùng thay đổi tùy thuộc vào từ khóa bạn đã sử dụng. Hãy thử "mô tả" trên kết quả của một phép nối - bạn sẽ thấy toán tử COGROUP trong kế hoạch giải nghĩa. – SquareCog

+0

Điều tôi ngụ ý bởi sản phẩm Descartes, là nếu có nhiều kết quả phù hợp trên khóa ngoại, bạn sẽ nhận được nhiều hồ sơ hơn. Ví dụ, nếu có 3x "abcde" trong một tập dữ liệu, và sau đó 4x "abcde" trong tập dữ liệu thứ hai, nó sẽ xuất ra các bản ghi 12x vì nó khớp với mỗi bản ghi. Trong khi đó, trong COGROUP, nó giữ mối quan hệ riêng biệt. –

Các vấn đề liên quan