درس قبل را و مثال آن را به یاد بیاورید. یک مجموعه ۱۰۰۰تایی متن خبر داشتیم و میخواستیم تعداد تکرار کلمات مختلف را در این متون پیدا کنیم. این کار را با استفاده از روش MapReduce به صورت موازی اجرا کردیم. در این درس میخواهیم به یک نکته بپردازیم و آن عملیات جا به جا پذیر (commutative) و انجمنی (associative) است.
در درس گذشته دیدیم که در فاز نگاشت یا همان Map، دستههای مختلفی از دادهها را گرفته و هر کدام از کلمات را به یک زوج (۱,کلمه) تبدیل میکردیم. سپس در فاز کاهش یا همان Reduce، مقادیر کلیدهای یکسان را با هم جمع کرده تا تعداد تکرار هر یک از کلمات به دست آید.
نکته جالب در این روش برنامه نویسی این است که در بعضی از اوقات، ترتیب (Order) در عملیات Reduce تفاوتی ندارد. مثلا در مثال ما، فرقی نمیکند که زوجهای داده شده به Reduce به چه ترتیبی با یکدیگر جمع میشوند. نتیجه در اینجا مستقل از ترتیب است. به این دست از مسائل، Associative And Commutative میگویند. به این معنی که دادههای این مسايل میتوانند بدون توجه به ترتیبشان پردازش شوند. ولی این چه کمکی میتواند به ما بکند؟
در مسائل انجمنی و جابهجاپذیر (Associative And Commutative)، میتواند قسمتی از عملیات کاهش (Reduce) را در فاز نگاشت (Map) انجام داد. به همان مثال شمارش تعداد کلمات در متن ۱۰۰۰خبر برگردیم. چه لزومی دارد که در فاز نگاشت (Map)، فقط زوجها به صورت (۱,کلمه) باشد. مثلا اگر کلمه رئیس در یک بلوک نگاشت (Map) به تعداد ۱۰بار تکرار شده باشد، ۱۰ زوج به صورت (۱,رئیس) برای آن بلوک از نگاشت (Map) تشکیل میشود. این در حالی است که در این مسئله به دلیل Associative And Commutative بودن آن، میتواند در همان فاز نگاشت (Map) یک زوج (۱۰,رئیس) را ایجاد نمود. سپس این زوجهای آماده در فاز گروه بندی (Group By Key) با کنار هم میآیند و در فاز کاهش (Reduce) میتوان آنها را با هم جمع کرد.
در واقع اگر مسئلهای انجمنی و جابهجاپذیر باشد، میتواند تعداد دادههایی را که در فازهای مختلف بایستی جابهجا شوند کاهش داد و این به این علت است که میتوان قسمتی از عملیات مربوط به فاز کاهش (Reduce) را در فاز نگاشت (Map) انجام داد.