অ্যাপাচি পিগ ইউডিএফ: পর্ব 1 - ইভাল, সমষ্টি এবং ফিল্টার ফাংশন



এই পোস্টে অ্যাপাচি পিগ ইউডিএফ - ইভাল, সমষ্টি এবং ফিল্টার ফাংশন সম্পর্কে বর্ণনা করা হয়েছে। ইভাল, সমষ্টি এবং ফিল্টার কার্যাদি একবার দেখুন।

অ্যাপাচি পিগ কাস্টম প্রসেসিং নির্দিষ্ট করার উপায় হিসাবে ব্যবহারকারী সংজ্ঞায়িত ফাংশনগুলির (ইউডিএফ) জন্য বিস্তৃত সমর্থন সরবরাহ করে। পিগ ইউডিএফ বর্তমানে তিনটি ভাষায় কার্যকর করা যেতে পারে: জাভা, পাইথন, জাভাস্ক্রিপ্ট এবং রুবি। জাভা ফাংশনগুলির জন্য সর্বাধিক বিস্তৃত সমর্থন সরবরাহ করা হয়।





জাভা ইউডিএফ একাধিক উপায়ে আবেদন করা যেতে পারে। সবচেয়ে সহজ ইউডিএফ কেবলমাত্র এভালফুঙ্ক প্রসারিত করতে পারে, যার জন্য কেবল এক্সিকিউট ফাংশনটি প্রয়োগ করা প্রয়োজন। প্রতিটি ইভাল ইউডিএফকে এটি বাস্তবায়ন করতে হবে। অতিরিক্তভাবে, যদি কোনও ফাংশন বীজগণিত হয় তবে এটি ক্যোয়ারের কার্য সম্পাদনকে উল্লেখযোগ্যভাবে উন্নত করতে বীজগণিত ইন্টারফেস প্রয়োগ করতে পারে।

শুয়োরের ইউডিএফগুলির গুরুত্ব:

পিগ ব্যবহারকারীদের ইউডিএফ এর মাধ্যমে তাদের নিজস্ব বা অন্যের কোডের সাথে বিদ্যমান অপারেটরদের একত্রিত করার অনুমতি দেয়। পিগের সুবিধা হ'ল ইউডিএফ-এর মাধ্যমে ব্যবহারকারীরা তাদের অপারেটরগুলিকে তাদের নিজস্ব বা অন্যের কোডের সাথে একত্রিত করতে দেয় ability সংস্করণ 0.7 এর মাধ্যমে সমস্ত ইউডিএফ অবশ্যই জাভাতে লেখা থাকতে হবে এবং জাভা ক্লাস হিসাবে প্রয়োগ করা হবে। এটি জাভা ক্লাস লিখে পিগারকে জেআর ফাইলটি সম্পর্কে অবহিত করে পিগকে নতুন ইউডিএফ যুক্ত করা সহজ করে তোলে।



শূকর নিজেই কিছু ইউডিএফ নিয়ে আসে। সংস্করণ 0.8 এর আগে এটি কেবলমাত্র স্ট্যান্ডার্ড এসকিউএল সমষ্টিগত ফাংশন এবং আরও কয়েকটি সহ একটি খুব সীমিত সেট ছিল। ০.৮-এ, স্ট্রিং-প্রসেসিং, গণিত এবং জটিল ধরণের ইউডিএফ প্রচুর পরিমাণে যুক্ত করা হয়েছিল।

পিগি ব্যাঙ্ক কী?

পিগি ব্যাঙ্ক হল ব্যবহারকারী-অবদানীকৃত ইউডিএফগুলির একটি সংগ্রহ যা পিগের সাথে প্রকাশিত হয়। পিগি ব্যাঙ্ক ইউডিএফগুলি পিগ জেআর-তে অন্তর্ভুক্ত নেই, সুতরাং আপনাকে এগুলি নিজের স্ক্রিপ্টে ম্যানুয়ালি নিবন্ধন করতে হবে। আপনি নিজের ইউডিএফ লিখতে বা অন্য ব্যবহারকারীর দ্বারা লিখিত এগুলি ব্যবহার করতে পারেন।

ইভাল ফাংশন

ইউডিএফ ক্লাসটি ইভালফঙ্ক বর্গ বাড়ায় যা সমস্ত ইভাল ফাংশনের ভিত্তি for সমস্ত মূল্যায়ন ফাংশন জাভা ক্লাসকে বাড়িয়ে দেয় ‘org.apache.pig.EvalFunc। ‘এটি ইউডিএফের রিটার্ন টাইপের সাথে প্যারামিটারাইজড যা এই ক্ষেত্রে জাভা স্ট্রিং। এই শ্রেণীর মূল পদ্ধতিটি হল ‘এক্সিকিউটিভ’। কোডের প্রথম লাইনটি ইঙ্গিত দেয় যে ফাংশনটি মিউডফস প্যাকেজের একটি অংশ।



এটি একটি রেকর্ড নেয় এবং একটি ফলাফল দেয়, যা প্রতিটি রেকর্ডের জন্য আমন্ত্রণ জানানো হবে যা কার্যকরকরণ পাইপলাইনের মধ্য দিয়ে যায়। এটি একটি টুপল লাগে, যার মধ্যে স্ক্রিপ্টটি আপনার ইউডিএফকে ইনপুট হিসাবে প্রেরণ করে। এটির পরে আপনি যে ধরণের মাধ্যমে EvalFunc প্যারামিটারাইজ করেছেন তা ফেরত দেয়।

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

পাইথন ডিএফ __init __ (স্ব)
প্যাকেজ myudfs আমদানি java.io.IOException আমদানি org.apache.pig.EvalFunc আমদানি org.apache.pig.data.Tuple পাবলিক ক্লাস UPPER EvalFunc extend পাবলিক স্ট্রিং এক্সিকিউট (টুপল ইনপুট) প্রসারিত IOException {যদি (ইনপুট == নাল || ইনপুট.সাইজ () == 0) রিটার্ন নাল ট্রাই করুন ring স্ট্রিং স্ট্র = (স্ট্রিং) ইনপুট.জেট (0) রিটার্ন str.toUpperCase ()} ক্যাচ (ব্যাতিকরণ) {নতুন আইওএক্সেপশন ('ব্যতিক্রম প্রসেসিং ইনপুট সারি ধরা আছে'), e)}}}

সমষ্টিগত কার্যাদি:

সমষ্টিগত ফাংশনগুলি এভাল ফাংশনের অন্য সাধারণ ধরণ type সমষ্টিগত ফাংশনগুলি সাধারণত গ্রুপযুক্ত ডেটাতে প্রয়োগ করা হয়। সমষ্টিগত ফাংশন একটি ব্যাগ নেয় এবং একটি স্কেলারের মান প্রদান করে। অনেক সমষ্টিগত ফাংশনের একটি আকর্ষণীয় এবং মূল্যবান বৈশিষ্ট্য হ'ল এগুলি বিতরণ পদ্ধতিতে ক্রমবর্ধমানভাবে গণনা করা যায়। হ্যাডোপ বিশ্বে এর অর্থ হ'ল আংশিক গণনা মানচিত্র এবং সংযোজক দ্বারা করা যেতে পারে এবং চূড়ান্ত ফলাফলটি রেডুসার দ্বারা গণনা করা যায়।

এটি নিশ্চিত করা খুব জরুরি যে বীজগণিতযুক্ত সমষ্টিগত ফাংশনগুলি যেমন প্রয়োগ করা হয়। এই ধরণের উদাহরণগুলির মধ্যে অন্তর্নির্মিত COUNT, MIN, MAX এবং গড় AV

COUNT বীজগণিত ফাংশনের একটি উদাহরণ যেখানে আমরা উপাত্তের একটি উপসেটে উপাদানগুলির সংখ্যা গণনা করতে পারি এবং তারপরে একটি চূড়ান্ত আউটপুট তৈরির জন্য পরিসংখ্যানগুলি যোগ করতে পারি। আসুন COUNT ফাংশন বাস্তবায়নের দিকে নজর দিন:

পাবলিক ক্লাস COUNT প্রসারিত EvalFunc প্রয়োগ করে বীজগণিত {পাবলিক লং এক্সিকিউট (টিপল ইনপুট) IOException {রিটার্ন কাউন্ট (ইনপুট)} পাবলিক স্ট্রিং getInitial () {রিটার্ন ইনিশিয়াল ক্লাস.সেটনাম ()} পাবলিক স্ট্রিং getIntermed ()) ফিরে ইন্টারমিডক্লাস। getName ()} পাবলিক স্ট্রিং getFinal () {রিটার্ন Final.class.getName ()} স্ট্যাটিক পাবলিক ক্লাস প্রাথমিক প্রসারিত EvalFunc {পাবলিক Tuple এক্সিকিউ (টিপল ইনপুট) নিক্ষেপ {TupleFactory.getInstance () ফেরান TupleFactory.getInstance ()। newTuple (গণনা (ইনপুট)) }} স্ট্যাটিক পাবলিক ক্লাস ইন্টারমিডেড ইভালফুঙ্ক প্রসারিত {পাবলিক টুপল এক্সিকিউট (টিপল ইনপুট) নিক্ষেপ করে up রিটার্ন টুপলফ্যাক্ট্রি.গেট ইনস্ট্যান্স ()। নিউটুপল (সমষ্টি (ইনপুট))} স্ট্যাটিক পাবলিক ক্লাস ফাইনাল ইভালফুঙ্ক {পাবলিক টুপল এক্সপ্রেস ছুড়ে দেয় আইওএক্সেপশন {রিটার্ন যোগফল (ইনপুট)}} স্ট্যাটিক সুরক্ষিত লম্বা গণনা (টিপল ইনপুট) এক্স্যাক্সেপশন th অবজেক্ট ভ্যালু = ইনপুট.জেট (0) যদি (মান উদাহরণস্বরূপ ডেটাবাগ) রিটার্ন ((ডেটাব্যাগ) মান)। সাইজ () অন্যথায় যদি (মানসমূহ) উদাহরণস্বরূপ মানচিত্র) নতুন দীর্ঘ (((মানচিত্র) মান)। সাইজ ()) return স্থিতিশীল সুরক্ষিত দীর্ঘ সমষ্টি (Tuple i) ফেরত দেয় এনপুট) এক্স্যাক্সেপশন, সংখ্যাফর্ম্যাটেক্সেক্সেশন ception ডাটাব্যাগ মানগুলি (ডাটাব্যাগ) ইনপুট.টেট (0) দীর্ঘ সমষ্টি = 0 এর জন্য (আইট্রেটার (টিপল) এটি = ভ্যালু.এইটরেটার () এটি.হেসেক্সট ()) up টুপল টি = এটি.নেক্সট ( ) যোগফল + = (দীর্ঘ) t.get (0) sum যোগফল}

COUNT এর মতো দেখতে বীজগণিত ইন্টারফেস প্রয়োগ করে:

পাবলিক ইন্টারফেস বীজগণিত {পাবলিক স্ট্রিং getInitial () পাবলিক স্ট্রিং getIntermed () পাবলিক স্ট্রিং getFinal ()

কোনও ফাংশনটি বীজগণিতীয় হওয়ার জন্য, এটি বীজগণিত ইন্টারফেস প্রয়োগ করতে হবে যা EvalFunc থেকে প্রাপ্ত তিনটি শ্রেণির সংজ্ঞা নিয়ে গঠিত। চুক্তিটি হ'ল প্রাথমিক শ্রেণির সম্পাদনকারীকে একবার ডাকা হয় এবং মূল ইনপুট টিপলকে দেওয়া হয়। এর আউটপুট একটি টিপল যা আংশিক ফলাফল রয়েছে। ইন্টারমিড ক্লাসের এক্সিকিউটিভ ফাংশনটিকে শূন্য বা আরও বেশি বার বলা যেতে পারে এবং এর ইনপুট হিসাবে একটি টিউপল গ্রহণ করে যা প্রাথমিক শ্রেণীর দ্বারা বা ইন্টারমিড ক্লাসের পূর্বে আহবান দ্বারা আংশিক ফলাফল ধারণ করে এবং অন্য আংশিক ফলাফলের সাথে একটি টিপল তৈরি করে। অবশেষে, ফাইনাল ক্লাসের এক্সিকিউশন ফাংশনটি বলা হয় এবং স্কেলারের ধরণের হিসাবে চূড়ান্ত ফলাফল দেয়।

ফিল্টার কার্যাদি:

ফিল্টার ফাংশনগুলি হল ইভাল ফাংশন যা বুলিয়ান মান দেয়। ফিলার অপারেটর বা বিনকন্ড এক্সপ্রেশন সহ এটি বুলিয়ান এক্সপ্রেশন যথাযথ যে কোনও জায়গায় ব্যবহার করা যেতে পারে। অ্যাপাচি পিগ সম্পূর্ণরূপে বুলিয়ান সমর্থন করে না, সুতরাং ফিল্টার ফাংশনগুলি ‘ফরচ’ এর মতো বিবৃতিতে উপস্থিত হতে পারে না, যেখানে ফলাফলগুলি অন্য অপারেটরের কাছে ফলাফল output তবে ফিল্টার ফাংশন ফিল্টার স্টেটমেন্টে ব্যবহার করা যেতে পারে।

নীচের উদাহরণটি ইস্পটি ফাংশন প্রয়োগ করে:

আমদানি করুন java.io.IOException আমদানি java.util.Map আমদানি org.apache.pig.FilterFunc আমদানি org.apache.pig.PigException আমদানি org.apache.pig.backend.executionengine.ExecException আমদানি org.apache.pig.data.DataBag org.apache.pig.data.Tuple আমদানি org.apache.pig.data.DataType / ** * ব্যাগ বা মানচিত্র খালি কিনা তা নির্ধারণ করুন import * / পাবলিক ক্লাস ইসেম্পটি ফিল্টারফঙ্ক প্রসারিত করে {@ ওভাররাইড পাবলিক বুলিয়ান এক্সিকিউশন (টিপল ইনপুট) নিক্ষেপ করে {চেষ্টা করুন {অবজেক্ট ভ্যালু = ইনপুট.জেট (0) যদি (ডাটাবেগ) মান (ডাটাবেগ) মান)। সাইজ () == 0 অন্যথায় যদি (মানচিত্রের মানচিত্রের মান) ফেরত ((মানচিত্র) মান) .size () == 0 অন্য {int errCode = 2102 স্ট্রিং URL = 'শূন্যতার জন্য একটি' + ডাটা টাইপ.ফাইন্ডটাইপনেম (মান) + 'পরীক্ষা করা যায় না' ' নিক্ষেপ করুন এক্সিকিউসেপশন (চিত্র, এরর কোড, পিগএক্সেপশন.বিইউজি)}} ধরা (এক্সেক্সিপশন ইই) e থ্রো ইই}}}