2009-01-09 26 views
84

Kịch bản nào sẽ đảm bảo việc sử dụng thuật toán "Map and Reduce"?Bản đồ và Giảm trong .NET


Có triển khai .NET cho thuật toán này không?

+3

thể trùng lặp của [Danh sách Generic Extensions trong C#] (http://stackoverflow.com/questions/40075/generic-list-extensions-in-c-sharp) – Satpal

Trả lời

160

LINQ tương đương của Map và Giảm: Nếu bạn đủ may mắn khi có LINQ thì bạn không cần phải viết các chức năng bản đồ và giảm của riêng bạn. C# 3.5 và Linq đã có nó mặc dù dưới tên gọi khác nhau.

Map = Select | Enumerable.Range(1, 10).Select(x => x + 2); 
Reduce = Aggregate | Enumerable.Range(1, 10).Aggregate(0, (acc, x) => acc + x); 
Filter = Where | Enumerable.Range(1, 10).Where(x => x % 2 == 0); 

https://www.justinshield.com/2011/06/mapreduce-in-c/

+1

Bản dịch là chính xác nhưng nó bỏ sót một điểm chính. Các bước shuffle trong bản đồ giảm là rất quan trọng trong bản đồ-giảm nhưng không hiển thị trong tên một người không phải viết bất kỳ mã cho nó. Nó chỉ được điều khiển bởi Khóa được trích xuất trong bước bản đồ. Joel Martinez câu trả lời nổi bật rằng theo ý kiến ​​của tôi tốt hơn. – user1583558

+2

Liên kết không hoạt động, liên kết chính xác là: https://www.justinshield.com/2011/06/mapreduce-in-c/ –

1

Nếu bạn đang cố gắng viết phiên bản Google của riêng mình thì có thể đảm bảo nó .. !!!

Nghiêm túc, nếu bạn gặp sự cố mà bạn có thể phân hủy thành nhiều vấn đề nhỏ hơn thì giải pháp Map-Reduce sẽ hoạt động. Các tài liệu Google trên MapReduce có một số ví dụ điển hình, bao gồm cách xử lý hàng ngàn trang web, đếm số từ trong tài liệu vv vv

+2

MapReduce Link là bị hỏng @Sean. Đây là liên kết mới http://research.google.com/archive/mapreduce.html – Vbp

+0

@vbp - cảm ơn, tôi đã cập nhật câu trả lời – Sean

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ review/low-quality-posts/18027646) – Gerard

10

Xem câu hỏi này khác liên quan đến bản đồ/giảm:

Generic List Extensions in C#

+0

Cảm ơn Ray, liên kết của bạn đã dẫn đến nhiều thông tin hữu ích – Developer

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên đưa các phần quan trọng của câu trả lời vào đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ đánh giá/chất lượng thấp-bài viết/18026777) – nvoigt

12

Các lớp của vấn đề rất thích hợp cho một giải pháp phong cách mapreduce là vấn đề của tập hợp. Trích xuất dữ liệu từ tập dữ liệu. Trong C#, người ta có thể tận dụng LINQ to program theo phong cách này.

Từ bài viết sau: http://codecube.net/2009/02/mapreduce-in-c-using-linq/

phương pháp groupby là hành động như bản đồ, trong khi Chọn phương pháp thực hiện công việc của việc giảm các kết quả trung gian vào danh sách cuối cùng của kết quả.

var wordOccurrences = words 
       .GroupBy(w => w) 
       .Select(intermediate => new 
       { 
        Word = intermediate.Key, 
        Frequency = intermediate.Sum(w => 1) 
       }) 
       .Where(w => w.Frequency > 10) 
       .OrderBy(w => w.Frequency); 

Đối với phần phân phối, bạn có thể kiểm tra DryadLINQ: http://research.microsoft.com/en-us/projects/dryadlinq/default.aspx

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