অ্যাপাচি পিগ ইউডিএফ: পার্ট 2 - লোড ফাংশন



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

আজকের পোস্টটি অ্যাপাচি পিগের লোড ফাংশন সম্পর্কে। এটিই এর সিক্যুয়েল প্রথম পোস্ট যা EVF, ফিল্টার এবং সমষ্টিগুলির মতো UDF ফাংশনগুলিকে আচ্ছাদিত করে। পিগ ইউডিএফের অন্যান্য ক্রিয়াকলাপের বিষয়ে আরও তথ্যের জন্য দয়া করে তাদেরকে রেফার করুন।





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

জাভা মধ্যে তথ্য টাইপ ingালাই

লোড ফাংশন - শ্রেণিবিন্যাস:

LoadFunc বিমূর্ত শ্রেণীর ডেটা লোড করার জন্য তিনটি প্রধান পদ্ধতি রয়েছে এবং বেশিরভাগ ব্যবহারের ক্ষেত্রে এটি প্রসারিত করার জন্য যথেষ্ট would আরও তিনটি alচ্ছিক ইন্টারফেস রয়েছে যা বর্ধিত কার্যকারিতা অর্জনের জন্য প্রয়োগ করা যেতে পারে:



  • লোডমেটাডেটা:

লোডমেটাডাটাতে মেটাডেটা মোকাবেলা করার পদ্ধতি রয়েছে। লোডারদের বেশিরভাগ মৃত্যুদন্ড কার্যকর করার প্রয়োজন নেই যদি না তারা কোনও মেটাটাটা সিস্টেমের সাথে যোগাযোগ করে। এই ইন্টারফেসের getSchema () পদ্ধতিটি লোডার বাস্তবায়নের জন্য পিগের কাছে ডেটার স্কিমা সম্পর্কে যোগাযোগ করার জন্য একটি উপায় সরবরাহ করে। যদি কোনও লোডার বাস্তবায়ন প্রকৃত প্রকারের ক্ষেত্রগুলির সমন্বিত ডেটা ফেরত দেয় তবে এটি getSchema () পদ্ধতির মাধ্যমে ফিরিয়ে নেওয়া ডেটা বর্ণনা করে স্কিমা সরবরাহ করবে। অন্যান্য পদ্ধতিগুলি অন্যান্য ধরণের মেটাডেটা যেমন পার্টিশন কী এবং পরিসংখ্যান নিয়ে কাজ করে। অন্যান্য প্রয়োগের জন্য বৈধ না হলে বাস্তবায়নগুলি এই পদ্ধতিগুলির জন্য নাল রিটার্ন মানগুলি ফিরিয়ে দিতে পারে।

  • লোডপশডাউন:

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

  • পুশপ্রজেকশন ():

এই পদ্ধতিটি লোডফঞ্চকে অবহিত করে, কোন ক্ষেত্রটি পিগ স্ক্রিপ্টে প্রয়োজনীয়। এইভাবে প্রয়োজনীয় ক্ষেত্রগুলি লোড করে কর্মক্ষমতা বাড়ানোর জন্য লোডফঞ্চকে সক্ষম করে। পুশপ্রজেকশন () একটি ‘প্রয়োজনীয়ফিল্ডলিস্ট’ নেয় ’‘ প্রয়োজনীয়ফিল্ডলিস্ট ’কেবল পঠনযোগ্য এবং লোডফঞ্চের দ্বারা পরিবর্তন করা যায় না। ‘আবশ্যকফিল্ডলিস্ট’-এ‘ আবশ্যকফিল্ড ’-র একটি তালিকা অন্তর্ভুক্ত রয়েছে, যেখানে প্রতিটি‘ আবশ্যকফিল্ড ’পিগ স্ক্রিপ্টের জন্য প্রয়োজনীয় ক্ষেত্রকে নির্দেশ করে এবং সূচক, ওরফে, টাইপ এবং সাবফিল্ড সমন্বিত। পিগটি স্ক্রিপ্টের জন্য প্রয়োজনীয় ক্ষেত্রগুলি সম্পর্কে লোডফঞ্চের সাথে যোগাযোগের জন্য প্রয়োজনীয় কলাম সূচী প্রয়োজনীয় ফিল্ড.ইন্ডেক্স ব্যবহার করে। প্রয়োজনীয় ক্ষেত্রটি যদি একটি মানচিত্র হয় তবে পিগটি 'প্রয়োজনীয়ফিল্ড.সুবফিল্ডস' পাস করবে যার মধ্যে মানচিত্রের জন্য পিগ স্ক্রিপ্টগুলির জন্য প্রয়োজনীয় কীগুলির একটি তালিকা রয়েছে contains



  • লোডকাস্টার:

লোডকাস্টারের বাইট অ্যারেগুলিকে নির্দিষ্ট ধরণের রূপান্তর করার কৌশল রয়েছে। ডেটাবাইটিআরয় ক্ষেত্র থেকে অন্য ধরণের ক্ষেত্রে অন্তর্নিহিত বা স্পষ্ট ক্যাসেটগুলিকে সমর্থন করার দরকার হলে কোনও লোডার প্রয়োগকরণ এটিকে প্রয়োগ করা উচিত।

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

  • getInputFormat ():

    এই পদ্ধতিটিকে লোডার দ্বারা ইনপুটফর্ম্যাটটি ব্যবহার করার জন্য ডেকে আনা হয়। ইনপুটফর্মেটের পদ্ধতিগুলিকে পিগ একটি মানচিত্রের জাভা প্রোগ্রামে হাদুপের মতো একই ফ্যাশনে ডাকে। যদি ইনপুটফর্ম্যাটটি হ্যাডোপ প্যাকেজযুক্ত হয়, তবে বাস্তবায়নের জন্য org.apache.hadoop.mapreduce এর অধীনে নতুন এপিআই ভিত্তিক একটি ব্যবহার করা উচিত। এটি যদি কাস্টম ইনপুটফর্ম্যাট হয় তবে org.apache.hadoop.mapreduce এ নতুন এপিআই ব্যবহার করে এটি প্রয়োগ করা ভাল।

  • স্থান নির্ধারণ করা():

    এই পদ্ধতিটি লোডার লোডের সাথে যোগাযোগের জন্য পিগ দ্বারা ডাকা হয়। কোর ইনপুট ফরম্যাটে একই তথ্য যোগাযোগের জন্য লোডারকে এই পদ্ধতিটি ব্যবহার করতে হবে। এই পদ্ধতিটিকে শূকর দ্বারা একাধিকবার বলা হয়।

  • প্রস্তুতডোআরড ():

    এই পদ্ধতিতে, LoadFunc সরবরাহ করে ইনপুট ফর্ম্যাট সম্পর্কিত রেকর্ডারীডার লোডফঞ্চে স্থানান্তরিত হয়। রেকর্ডারিডারটি এখন getNext () তে প্রয়োগের মাধ্যমে পিগকে ডেটা রেকর্ডের প্রতিনিধিত্ব করে এমন একটি টুপল ফেরত দিতে ব্যবহার করা যেতে পারে।

  • getNext ():

    GetNext () এর অর্থ পরিবর্তিত হয় নি এবং ডাইর পরবর্তী টিপল অর্জনের জন্য পিগ রানটাইম বলে। এই পদ্ধতিতে, বাস্তবায়নের অন্তর্নিহিত রেকর্ডারীডার ব্যবহার করা উচিত এবং ফিরে আসার জন্য টিপলটি তৈরি করা উচিত।

লোডফঞ্চে ডিফল্ট বাস্তবায়ন:

নোট করুন যে লোডফঞ্চে ডিফল্ট প্রয়োগগুলি কেবল যখন প্রয়োজন হবে তখনই ওভাররাইড করা উচিত।

  • setUdfContextSignature ():

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

  • আপেক্ষিক টো অ্যাবসুলিউটপথ ():

    পিগ রানটাইম এই পদ্ধতিটি কল করে লোডারকে আপেক্ষিক লোডের অবস্থানটিকে একটি পরম স্থানে রূপান্তর করতে অনুমতি দেয় to লোডফঙ্কে প্রদত্ত ডিফল্ট বাস্তবায়ন ফাইল ফাইল সিস্টেমের জন্য এটি পরিচালনা করে। যদি লোড উত্স অন্য কিছু হয় তবে লোডার বাস্তবায়ন এটিকে ওভাররাইড করতে বেছে নিতে পারে।

উদাহরণে লোডার বাস্তবায়ন হ'ল লাইন ডিলিমিটারযুক্ত পাঠ্য ডেটার জন্য একটি লোডার
‘এবং’ ‘পিগের বর্তমান পিগস্টোরেজ লোডারের অনুরূপ ডিফল্ট ফিল্ড ডিলিমিটার হিসাবে। প্রয়োগটি একটি বিদ্যমান হ্যাডোপ সমর্থিত ইনপুটফর্ম্যাট - টেক্সটইনপুট ফর্ম্যাট - অন্তর্নিহিত ইনপুট ফর্ম্যাট হিসাবে ব্যবহার করে।

পাবলিক ক্লাস সিম্পল টেক্সটলোডার লোডফঞ্চ {সুরক্ষিত রেকর্ডারিডারকে বাড়িয়ে দেয় = নাল প্রাইভেট বাইট ফিল্ড ডেল = '' প্রাইভেট অ্যারেলিস্ট এমপ্রোটটুপল = নাল প্রাইভেট টিপলফ্যাক্টরি এমটুপ্লাফ্যাক্টরি = টুপলফ্যাক্টরি বিট ইন্স্ট্যান্স () প্রাইভেট স্ট্যাটিক ফাইনাল ইন বিউফার_সিক্ট = L৪৪৪ পাবলিক পিগ লোডার যা ক্ষেত্রের ডেলিমিটার হিসাবে নির্দিষ্ট অক্ষর ব্যবহার করে। * * @ পরিমাপের ডিলিমিটার * একক বাইট অক্ষর যা ক্ষেত্রগুলি পৃথক করতে ব্যবহৃত হয়। * ('' ডিফল্ট।) * / পাবলিক সিম্পল টেক্সটলডার (স্ট্রিং ডিলিমিটার) {এটি () যদি (ডিলিমেটার.এলেথ () == 1) {this.fieldDel = (বাইট) ডিলিমেটার.কম (0) - অন্যথায় যদি ( ডেলিমিটার.লেন্থ ()> 1 & ডেলিমিটার.সিআরএট (0) == '') {সুইচ (ডেলিমিটার.সিআরএট (1)) {কেস 'টি': এই.ফিল্ডেল = (বাইট) '' ব্রেক কেস 'এক্স' : ফিল্ডডেল = পূর্ণসংখ্যা রানটাইমএক্সেপশন ('অজানা ডিলিমিটার' + ডিলিমিটার) Run} অন্যথায় {নতুন রানটাইম এক্সেকশন ('পিগস্টোরেজ ডিলিমেটারটি অবশ্যই একটি একক অক্ষর হতে হবে')}} @ ওভাররাইড পাবলিক টুপল getNext () নিক্ষেপ করে {বুলিয়ান নটডোন ইন ইনেক্সটকিভ্যালু () (notDone) {ফেরানো নাল} পাঠ্য মান = (পাঠ্য) in.getCurrentValue () বাইট [] buf = মান.getBytes () int len ​​= value.getLength () int start = 0 for (int i = 0 iআমাদের জন্য একটি প্রশ্ন আছে? দয়া করে মন্তব্য বিভাগে এটি উল্লেখ করুন এবং আমরা আপনার কাছে ফিরে আসব। 

সম্পর্কিত পোস্ট: