ভাল মানচিত্রের উদাহরণ [বন্ধ]


202

"ম্যাপ্রেইডুস সহ একটি দীর্ঘ পাঠ্যে কীভাবে শব্দ গণনা করতে হবে" টাস্ক ছাড়া অন্য কোনও ভাল উদাহরণ আমি ভাবতে পারি না। আমি দেখতে পেলাম যে এই সরঞ্জামটি কতটা শক্তিশালী হতে পারে তা অন্যকে বোঝানোর জন্য এটি সর্বোত্তম উদাহরণ নয়।

আমি কোড-স্নিপেটগুলি খুঁজছি না, সত্যিই কেবল "পাঠ্য" উদাহরণ।


1
আমি মনে করি একটি অনুরূপ তবে আরও ভাল উদাহরণ হ'ল আপনার কম্পিউটারে থাকা আপনার সমস্ত পাঠ্য ফাইলের জন্য শব্দ গণনা করা। এটি বোঝা সহজ এবং মানচিত্রের শক্তি প্রদর্শন করে।
পিটার লি

5
আমি যে সর্বশেষ চারটি প্রশ্নের সন্ধান করেছি, আমি সেগুলিতে এই সাইটে অ গঠনমূলক হিসাবে বন্ধ পেয়েছি found ভাগ্য দ্বারা তাদের ইতিমধ্যে উত্তর আছে। লেখকদের কাছে আমি আমার কৃতজ্ঞতাটির প্রতি সমর্থন জানাই এবং এখন পর্যন্ত, ৮০ জনেরও বেশি ব্যক্তি রয়েছেন যারা সমাপনী নীতি বোঝেন না। এটি অন্যের কাছে গুরুত্বপূর্ণ নয় তবে আমি 80 এর দশকের শুরু থেকেই একজন পেশাদার প্রোগ্রামার এবং এখন
অবধি

1
মানচিত্রের ডিজাইনের ধরণগুলি একবার করে দেখুন: যেমন এই স্লাইডগুলিতে কিছু আচ্ছাদিত রয়েছে এবং আরও কিছু এই বইতে
ডেনিস

উত্তর:


297

মানচিত্র হ্রাস একটি ফ্রেমওয়ার্ক যা বিশাল পরিমাণে ডেটা দক্ষতার সাথে প্রক্রিয়া করার জন্য তৈরি করা হয়েছিল। উদাহরণস্বরূপ, যদি আমাদের একটি ডেটাসেটে 1 মিলিয়ন রেকর্ড থাকে, এবং এটি একটি রিলেশনাল উপস্থাপনায় সংরক্ষণ করা হয় - মানগুলি পাওয়া এবং এগুলিতে কোনও ধরণের রূপান্তর সম্পাদন করা খুব ব্যয়বহুল।

এসকিউএল-এর উদাহরণের জন্য, জন্মের তারিখটি দেওয়া হয়েছে, মিলিয়ন রেকর্ডের জন্য কত লোক> 30 বছর বয়সী তা নির্ধারণ করতে কিছু সময় লাগবে, এবং যখন অনুসন্ধানের জটিলতা বৃদ্ধি পাবে তখন কেবল এই চৌম্বকটির ক্রমে বৃদ্ধি পাবে। মানচিত্র হ্রাস একটি ক্লাস্টার ভিত্তিক বাস্তবায়ন সরবরাহ করে যেখানে ডেটা বিতরণ পদ্ধতিতে প্রক্রিয়া করা হয়

এখানে একটি উইকিপিডিয়া নিবন্ধ এখানে কি আছে তা ব্যাখ্যা করেmap-reduce

আর একটি ভাল উদাহরণ হ'ল ম্যাপের মাধ্যমে বন্ধুবান্ধব সন্ধান করা ধারণাটি বোঝার জন্য একটি শক্তিশালী উদাহরণ হতে পারে, এবং একটি ভাল ব্যবহৃত ব্যবহারের ক্ষেত্রে।

ব্যক্তিগতভাবে, ধারণাটি বুঝতে এই লিঙ্কটি বেশ কার্যকর খুঁজে পেয়েছেন

ব্লগে প্রদত্ত ব্যাখ্যাটি অনুলিপি করা হচ্ছে (যদি লিঙ্কটি বাসি হয়ে যায়)

বন্ধুবান্ধব সন্ধান করা

ম্যাপ্রেডস হ'ল মূলত গুগলে বিকাশ করা একটি কাঠামো যা বেশ কয়েকটি ডোমেন জুড়ে সহজ আকারে বিতরণ করা কম্পিউটিংয়ের অনুমতি দেয় allows অ্যাপাচি হাদুপ একটি ওপেন সোর্স বাস্তবায়ন।

আমি বিশদটি টানব, তবে এটি দুটি ফাংশন সংজ্ঞায়িত করতে নেমে আসে: একটি মানচিত্র ফাংশন এবং একটি হ্রাস ফাংশন। মানচিত্রের ফাংশনটি একটি মান নেয় এবং কী কী আউটপুট দেয়: মান জোড়ায়। উদাহরণস্বরূপ, আমরা যদি কোনও মানচিত্রের ফাংশনটি সংজ্ঞায়িত করি যা একটি স্ট্রিং নেয় এবং শব্দের দৈর্ঘ্যটিকে কী হিসাবে এবং শব্দটিকে নিজের মান হিসাবে আউটপুট করে দেয় তবে মানচিত্র (স্টিভ) 5 ফিরে আসবে: স্টিভ এবং মানচিত্র (স্যাভান্নাহ) 8: সাওয়ানা । আপনি লক্ষ করেছেন যে মানচিত্রের ফাংশনটি রাষ্ট্রহীন এবং এর আউটপুট মানের গণনা করার জন্য কেবল ইনপুট মানের প্রয়োজন। এটি আমাদেরকে সমান্তরাল মানের বিপরীতে মানচিত্রের ক্রিয়াকলাপ চালানোর অনুমতি দেয় এবং একটি বিশাল সুবিধা সরবরাহ করে। আমরা হ্রাস ফাংশনে পৌঁছানোর আগে ম্যাপ্রেডস ফ্রেমওয়ার্কটি সমস্ত মানকে কী দ্বারা একত্রিত করে, তাই যদি মানচিত্রটি নিম্নলিখিত কীটি আউটপুট দেয়: মান জোড়া:

3 : the
3 : and
3 : you
4 : then
4 : what
4 : when
5 : steve
5 : where
8 : savannah
8 : research

তারা এই হিসাবে গোষ্ঠীভুক্ত হয়:

3 : [the, and, you]
4 : [then, what, when]
5 : [steve, where]
8 : [savannah, research]

এর পরে প্রতিটি লাইন হ্রাস কার্যকারিতা হিসাবে যুক্তি হিসাবে পাস হবে, যা একটি কী এবং মানগুলির তালিকা গ্রহণ করে। এই উদাহরণস্বরূপ, আমরা নির্দিষ্ট দৈর্ঘ্যের কত শব্দ বিদ্যমান তা নির্ধারণের চেষ্টা করতে পারি, সুতরাং আমাদের হ্রাস কার্যকারিতা কেবল তালিকার আইটেমের সংখ্যা গণনা করবে এবং তালিকার আকারের সাথে কী আউটপুট দেবে, যেমন:

3 : 3
4 : 3
5 : 2
8 : 2

হ্রাসগুলি সমান্তরালভাবেও করা যেতে পারে, আবার একটি বিশাল সুবিধা প্রদান করে। এরপরে আমরা এই চূড়ান্ত ফলাফলগুলি দেখতে পারি এবং দেখতে পারি যে আমাদের কর্পাসে 5 এর দৈর্ঘ্যের মাত্র দুটি শব্দ ছিল, ইত্যাদি ...

ম্যাপ্রেডস-এর সর্বাধিক সাধারণ উদাহরণ হ'ল কোনও কর্পাসে কতবার শব্দ হয় তা গণনা করা। ধরুন আপনার কাছে ইন্টারনেটের একটি অনুলিপি ছিল (আমি এ জাতীয় পরিস্থিতিতে কাজ করার সৌভাগ্যবান হয়েছি), এবং আপনি ইন্টারনেটে প্রতিটি শব্দের একটি তালিকা চেয়েছিলেন এবং এটি কতবার হয়েছিল।

আপনি যেভাবে এর কাছে যাবেন তা হ'ল আপনার কাছে থাকা দস্তাবেজগুলিকে টোকনাইজ করা (এটি শব্দগুলিতে বিভক্ত করা) এবং প্রতিটি শব্দ একটি ম্যাপারের কাছে পৌঁছে দেওয়া। ম্যাপারটি আবার একটি মান সহ শব্দটি আবার বের করে দেবে 1। গোষ্ঠীকরণের পর্যায়ে সমস্ত কীগুলি নেওয়া হবে (এই ক্ষেত্রে শব্দগুলিতে), এবং 1 এর একটি তালিকা তৈরি করবে। হ্রাস পর্বের পরে একটি কী (শব্দ) এবং একটি তালিকা (প্রতিটি বার কী ইন্টারনেটে কী প্রদর্শিত হবে তার জন্য 1 এর একটি তালিকা) নেয় এবং তালিকাটি যোগ করে। রিডুসারটি তার শুরুর সাথে শব্দের আউটপুট দেয়। সব কিছু বলা হয়ে গেলে এবং শেষ হয়ে গেলে আপনার কাছে ইন্টারনেটে প্রতিটি শব্দের একটি তালিকা থাকবে এবং কতবার প্রদর্শিত হয়েছিল।

সহজ, তাই না? আপনি যদি কখনও ম্যাপ্রেডস সম্পর্কে পড়ে থাকেন তবে উপরের দৃশ্যটি নতুন কিছু নয় ... এটি ম্যাপ্রেডসের "হ্যালো, ওয়ার্ল্ড"। সুতরাং এখানে একটি বাস্তব বিশ্বের ব্যবহারের কেস (ফেসবুক প্রকৃতপক্ষে নিম্নলিখিতগুলি করতে পারে বা নাও পারে, এটি কেবল একটি উদাহরণ):

ফেসবুকের বন্ধুদের একটি তালিকা রয়েছে (নোট করুন ফেসবুকে বন্ধুরা দ্বি-দিকনির্দেশক জিনিস। আমি যদি আপনার বন্ধু হন তবে আপনি আমার)। তাদের ডিস্কের প্রচুর জায়গাও রয়েছে এবং তারা প্রতিদিন কয়েক মিলিয়ন অনুরোধ পরিবেশন করে। তারা যখন অনুরোধের প্রসেসিংয়ের সময় কমাতে পারে তখন তাদের গণনাগুলি প্রাক-গণনা করার সিদ্ধান্ত নিয়েছে। একটি সাধারণ প্রক্রিয়াজাতকরণের অনুরোধটি হ'ল "আপনার এবং জোতে 230 জন বন্ধু রয়েছে" বৈশিষ্ট্য। আপনি যখন কারও প্রোফাইলে যান, আপনি আপনার বন্ধুদের মধ্যে একটি সাধারণ তালিকা দেখতে পাবেন common এই তালিকাটি ঘন ঘন পরিবর্তিত হয় না তাই আপনি যতবার প্রোফাইলে গিয়েছিলেন তা পুনরায় গণনা করা ব্যর্থ হবে (নিশ্চিত যে আপনি একটি শালীন ক্যাচিং কৌশল ব্যবহার করতে পারেন তবে আমি এই সমস্যার জন্য ম্যাপ্রেডস সম্পর্কে লেখা চালিয়ে যেতে সক্ষম হব না)। আমরা ম্যাপ্রেডস ব্যবহার করব যাতে আমরা সবাইকে গণনা করতে পারি ' দিনের সাধারণ বন্ধুরা একবারে এই ফলাফলগুলি সঞ্চয় করে। পরে এটি কেবল একটি দ্রুত অনুসন্ধান lookup আমরা প্রচুর ডিস্ক পেয়েছি, এটি সস্তা।

ধরুন বন্ধুরা ব্যক্তি -> [বন্ধুদের তালিকা] হিসাবে সঞ্চিত আছে, আমাদের বন্ধুদের তালিকাটি তখন:

A -> B C D
B -> A C D E
C -> A B D E
D -> A B C E
E -> B C D

প্রতিটি লাইন ম্যাপারের পক্ষে যুক্তি হবে। বন্ধুদের তালিকার প্রতিটি বন্ধুর জন্য ম্যাপার একটি মূল-মান জুটি আউটপুট দেবে। কীটি সেই ব্যক্তির সাথে বন্ধু হবে be মানটি হবে বন্ধুদের তালিকা। কীটি বাছাই করা হবে যাতে বন্ধুরা যাতে ক্রমযুক্ত থাকে, ফলে সমস্ত জোড়া বন্ধুদের একই রিডিউসারে যায়। এটি পাঠ্যের সাহায্যে ব্যাখ্যা করা শক্ত, সুতরাং আসুন এটি করা যাক এবং আপনি প্যাটার্নটি দেখতে পারেন কিনা তা দেখুন। সমস্ত ম্যাপারগুলি চলমান শেষ হওয়ার পরে, আপনার এইরকম একটি তালিকা থাকবে:

For map(A -> B C D) :

(A B) -> B C D
(A C) -> B C D
(A D) -> B C D

For map(B -> A C D E) : (Note that A comes before B in the key)

(A B) -> A C D E
(B C) -> A C D E
(B D) -> A C D E
(B E) -> A C D E
For map(C -> A B D E) :

(A C) -> A B D E
(B C) -> A B D E
(C D) -> A B D E
(C E) -> A B D E
For map(D -> A B C E) :

(A D) -> A B C E
(B D) -> A B C E
(C D) -> A B C E
(D E) -> A B C E
And finally for map(E -> B C D):

(B E) -> B C D
(C E) -> B C D
(D E) -> B C D
Before we send these key-value pairs to the reducers, we group them by their keys and get:

(A B) -> (A C D E) (B C D)
(A C) -> (A B D E) (B C D)
(A D) -> (A B C E) (B C D)
(B C) -> (A B D E) (A C D E)
(B D) -> (A B C E) (A C D E)
(B E) -> (A C D E) (B C D)
(C D) -> (A B C E) (A B D E)
(C E) -> (A B D E) (B C D)
(D E) -> (A B C E) (B C D)

প্রতিটি লাইন হ্রাসকারকের পক্ষে যুক্তি হিসাবে পাস করা হবে। হ্রাস ফাংশনটি কেবল মূল্যগুলির তালিকে ছেদ করে এবং ছেদ করার ফলাফলের সাথে একই কী আউটপুট দেয়। উদাহরণস্বরূপ, হ্রাস ((এবি) -> (এসিডিই) (বিসিডি)) আউটপুট করবে (এবি): (সিডি) এবং এর অর্থ হল বন্ধু এ এবং বি এর সাধারণ বন্ধু হিসাবে সি এবং ডি রয়েছে।

হ্রাসের পরে ফলাফল:

(A B) -> (C D)
(A C) -> (B D)
(A D) -> (B C)
(B C) -> (A D E)
(B D) -> (A C E)
(B E) -> (C D)
(C D) -> (A B E)
(C E) -> (B D)
(D E) -> (B C)

এখন যখন ডি বি এর প্রোফাইল দেখুন, আমরা দ্রুত সন্ধান করতে পারি (B D)এবং দেখতে পাচ্ছি যে তাদের তিনটি বন্ধু মিলে (A C E),।


4
আরেকটি উদাহরণ হ'ল বিশ্বজুড়ে আবহাওয়ার তথ্য বিশ্লেষণ করা। যে কোনও অঞ্চলের জন্য সর্বাধিক এবং মিনিট সন্ধান করা। এটি একটি খুব ভাল উদাহরণ।
rvphx

Inter সমস্ত মধ্যবর্তী টিউপল তৈরি করে এবং পরে সবার জন্য ছেদটি পরীক্ষা করে নেওয়া কি বিরক্তিকর নয়? এ বি এসি বিসি ইত্যাদির মতো সমস্ত সম্ভাব্য বন্ধুত্বের জুড়ি তৈরি করা এবং এই জুটিটি কেবলমাত্র দুটি জোড়ের মধ্যে থাকা দুটি বন্ধুর মধ্যে একটি নির্দিষ্ট মেশিনে রেখে পুরো বন্ধুত্বের তালিকাগুলির সাথে নির্দিষ্ট মেশিনে পাস করা এবং এটি ছেদটি গণনা করা ভাল না? আমি এখানে কি মিস করছি?
গ্রোয়াম্যান

8
যদি কোনও ই এর প্রোফাইল পরিদর্শন করেন? চূড়ান্ত ফলাফলের কোনও (এ, ই) নেই যদিও তাদের বন্ধুবান্ধব মিল রয়েছে।
চিমটি

1
@ পিঞ্চ এর কারণ এ এবং ই নিজেরাই বন্ধু নয়। সেক্ষেত্রে এই পদ্ধতিটি অপ্রতুল বলে মনে হচ্ছে (যদি আপনি এটি বিবেচনা না করেন যে এ বা ই বন্ধুবান্ধবদের জন্য তাদের
ফ্রেন্ডলিস্টটি

1
@ কর্মার্থিক: আমি গ্রুপিংয়ের পর্ব নিয়ে বিভ্রান্ত। মানচিত্র এবং হ্রাস স্পষ্টতই সমান্তরালভাবে চালানো যেতে পারে তবে গ্রুপিং পর্বের কী হবে? এটি অবশ্যই একটি থ্রেডে করা উচিত বা আমি কিছু মিস করছি?
ডাইনাইজ

24

হ্যাডোপের মতো মানচিত্রের প্রয়োগের সর্বোত্তম উদাহরণগুলির মধ্যে একটি

মনে রাখবেন যে এগুলি মানচিত্রের ধারণার মূল-ভিত্তিক বাস্তবায়নের মধ্যে সীমাবদ্ধ (যাতে তারা প্রয়োগে সীমাবদ্ধ থাকে)।


তুমি ঠিক. তবে রিয়েল-ওয়ার্ল্ডের বেশিরভাগ সমস্যা মূল-মূল ভিত্তিক বা কী-ভ্যালু প্যারাডাইমে অনুবাদ করা যেতে পারে।
সাইসুমান্থ গোপেসেটি

4

আপনি মানচিত্রে যে কাজগুলি করতে পারেন তার একটি সেট হ'ল সাধারণ এসকিউএল ক্রিয়াকলাপগুলির সেট: নির্বাচন করুন, যেখানে নির্বাচন করুন, গ্রুপের মাধ্যমে, ect।

আর একটি ভাল উদাহরণ ম্যাট্রিক্স গুণ, যেখানে আপনি এম এর এক সারি এবং পুরো ভেক্টর এক্স এবং এম * x এর একটি উপাদান গণনা করেন।


3

সময়ে সময়ে আমি মানুষের কাছে এমআর ধারণাগুলি উপস্থাপন করি। আমি লোকদের সাথে পরিচিত প্রসেসিংয়ের কাজগুলি খুঁজে পাই এবং তারপরে এগুলি এমআর দৃষ্টান্তে ম্যাপ করি।

সাধারণত আমি দুটি জিনিস গ্রহণ করি:

  1. গ্রুপ দ্বারা / সমষ্টি। এখানে এলোমেলো পর্যায়ের সুবিধাটি পরিষ্কার। এমন একটি ব্যাখ্যা যা বদলে যায় সাজানো বিতরণও করা হয় + বিতরণ করা বাছাই করা অ্যালগরিদমের ব্যাখ্যাও সহায়তা করে।

  2. দুটি টেবিল যোগ। ডিবিতে কাজ করা লোকেরা ধারণা এবং এর স্কেলিবিলিটি সমস্যার সাথে পরিচিত। এটি এমআর তে কীভাবে করা যায় তা দেখান।


অ নার্দের কাছে এক্সপ্লিল করার জন্য আমি বাচ্চাদের পদ্ধতিটি ব্যবহার করি: আপনার কাছে আগ্রহী বাচ্চাদের একটি গুচ্ছ এবং অনেকগুলি কার্ড রয়েছে। আপনি প্রতিটি বাচ্চাকে কার্ড * ডেকে পিছনে বাছাই করতে বলার জন্য একটি পরিমাণ কার্ড দেন, তারপরে নম্বর / ছবি দিয়ে স্যুট অনুসারে- অর্থাৎ মানচিত্রে প্রতিটি বাচ্চা সমাপ্ত হয় এবং একবারে দু'জন প্রাপ্তবয়স্কদের একটি বরাদ্দ সেট নিয়ে আসে। প্রতিটি প্রাপ্তবয়স্ক স্তূপটিকে এক স্তূপে "হ্রাস" করে এবং তারপরে প্রতিটি দুজন প্রাপ্তবয়স্ক একটি বিনামূল্যে প্রাপ্তবয়স্ককে সেখানে কার্ড স্ট্যাক দেয় give এটি সংজ্ঞা অনুসারে বাচ্চা / স্ট্যাকের সংখ্যা অনুসারে একাধিকবার চালানো যায় এমন হ্রাস কার্যকারিতা। বেশিরভাগ লোকেরা প্রথম চেষ্টা করে এটি পান
মিকি পার্লস্টাইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.