அப்பாச்சி பன்றி யுடிஎஃப்: பகுதி 1 - ஈவல், மொத்த மற்றும் வடிகட்டி செயல்பாடுகள்



இந்த இடுகை அப்பாச்சி பன்றி யுடிஎஃப் - ஈவல், மொத்த மற்றும் வடிகட்டி செயல்பாடுகள் பற்றி விவரிக்கிறது. ஈவல், மொத்த மற்றும் வடிகட்டி செயல்பாடுகளைப் பாருங்கள்.

தனிப்பயன் செயலாக்கத்தைக் குறிப்பிடுவதற்கான ஒரு வழியாக அப்பாச்சி பிக் பயனர் வரையறுக்கப்பட்ட செயல்பாடுகளுக்கு (யுடிஎஃப்) விரிவான ஆதரவை வழங்குகிறது. பன்றி யு.டி.எஃப் கள் தற்போது மூன்று மொழிகளில் செயல்படுத்தப்படலாம்: ஜாவா, பைதான், ஜாவாஸ்கிரிப்ட் மற்றும் ரூபி. ஜாவா செயல்பாடுகளுக்கு மிகவும் விரிவான ஆதரவு வழங்கப்படுகிறது.





ஜாவா யுடிஎஃப்களை பல வழிகளில் செயல்படுத்தலாம். எளிமையான யுடிஎஃப் ஈவல்ஃபங்கை நீட்டிக்க முடியும், இதற்கு செயல்படுத்தும் செயல்பாடு மட்டுமே தேவைப்படுகிறது. ஒவ்வொரு ஈவல் யுடிஎஃப் இதை செயல்படுத்த வேண்டும். கூடுதலாக, ஒரு செயல்பாடு இயற்கணிதமாக இருந்தால், வினவல் செயல்திறனை கணிசமாக மேம்படுத்த இயற்கணித இடைமுகத்தை இது செயல்படுத்தலாம்.

பன்றியில் யுடிஎப்களின் முக்கியத்துவம்:

தற்போதுள்ள ஆபரேட்டர்களை யுடிஎஃப் வழியாக தங்கள் சொந்த அல்லது மற்றவர்களின் குறியீட்டோடு இணைக்க பன்றி அனுமதிக்கிறது. பிக் இன் நன்மை என்னவென்றால், பயனர்கள் அதன் ஆபரேட்டர்களை யுடிஎஃப் வழியாக தங்கள் சொந்த அல்லது மற்றவர்களின் குறியீட்டோடு இணைக்க அனுமதிக்கும் திறன் ஆகும். பதிப்பு 0.7 வரை, அனைத்து யுடிஎப்களும் ஜாவாவில் எழுதப்பட வேண்டும் மற்றும் அவை ஜாவா வகுப்புகளாக செயல்படுத்தப்படுகின்றன. ஜாவா வகுப்பை எழுதி JAR கோப்பைப் பற்றி பிக்-க்குத் தெரிவிப்பதன் மூலம் புதிய யு.டி.எஃப்-களை பன்றியில் சேர்ப்பது இது எளிதாக்குகிறது.



பன்றி சில யு.டி.எஃப் உடன் வருகிறது. பதிப்பு 0.8 க்கு முன்பு, இது நிலையான SQL மொத்த செயல்பாடுகளையும் இன்னும் சிலவற்றையும் கொண்ட மிகக் குறைந்த தொகுப்பாகும். 0.8 இல், அதிக எண்ணிக்கையிலான நிலையான சரம்-செயலாக்கம், கணிதம் மற்றும் சிக்கலான வகை யுடிஎஃப் ஆகியவை சேர்க்கப்பட்டன.

பிக்கிபேங்க் என்றால் என்ன?

பிக்கிபேங்க் என்பது பயனர் பங்களித்த யுடிஎஃப்களின் தொகுப்பாகும், இது பிக் உடன் வெளியிடப்படுகிறது. Piggybank UDF கள் பிக் JAR இல் சேர்க்கப்படவில்லை, எனவே அவற்றை உங்கள் ஸ்கிரிப்ட்டில் கைமுறையாக பதிவு செய்ய வேண்டும். நீங்கள் உங்கள் சொந்த யுடிஎஃப்களை எழுதலாம் அல்லது பிற பயனர்களால் எழுதப்பட்டவற்றைப் பயன்படுத்தலாம்.

ஈவல் செயல்பாடுகள்

யுடிஎஃப் வகுப்பு ஈவல்ஃபங்க் வகுப்பை விரிவுபடுத்துகிறது, இது அனைத்து ஈவல் செயல்பாடுகளுக்கும் அடிப்படையாகும். அனைத்து மதிப்பீட்டு செயல்பாடுகளும் ஜாவா வகுப்பை ‘org.apache.pig.EvalFunc ஐ நீட்டிக்கின்றன. ‘இது யு.டி.எஃப் இன் திரும்ப வகைடன் அளவுருவாக்கப்பட்டுள்ளது, இது இந்த வழக்கில் ஜாவா சரம். இந்த வகுப்பில் உள்ள முக்கிய முறை ‘exec.’ குறியீட்டின் 1 வது வரி செயல்பாடு myudfs தொகுப்பின் ஒரு பகுதி என்பதைக் குறிக்கிறது.



இது ஒரு பதிவை எடுத்து ஒரு முடிவை அளிக்கிறது, இது மரணதண்டனைக் குழாய் வழியாக செல்லும் ஒவ்வொரு பதிவுக்கும் பயன்படுத்தப்படும். இது ஒரு டூப்பிள் எடுக்கும், இது ஸ்கிரிப்ட் உங்கள் யுடிஎஃப்-க்கு உள்ளீடாக அனுப்பும் அனைத்து புலங்களையும் கொண்டுள்ளது. இது நீங்கள் EvalFunc ஐ அளவுருவாக்கிய வகையை வழங்குகிறது.

இந்த செயல்பாடு ஒவ்வொரு உள்ளீட்டு டூப்பிளிலும் செயல்படுத்தப்படுகிறது. செயல்பாட்டிற்கான உள்ளீடு பிக் ஸ்கிரிப்ட்டில் உள்ள செயல்பாட்டிற்கு அனுப்பப்படும் வரிசையில் உள்ளீட்டு அளவுருக்கள் கொண்ட ஒரு டூப்பிள் ஆகும். கீழே காட்டப்பட்டுள்ள எடுத்துக்காட்டில், செயல்பாடு சரத்தை உள்ளீடாக எடுக்கும். பின்வரும் செயல்பாடு சிறிய எழுத்திலிருந்து பெரிய எழுத்திற்கு சரத்தை மாற்றுகிறது. இப்போது செயல்பாடு செயல்படுத்தப்பட்டதால், அதை தொகுத்து ஒரு JAR இல் சேர்க்க வேண்டும்.

தொகுப்பு myudfs இறக்குமதி java.io.IOException இறக்குமதி org.apache.pig.EvalFunc இறக்குமதி org.apache.pig.data.Tuple பொது வகுப்பு UPPER EvalFunc ஐ நீட்டிக்கிறது {public string string (Tuple input) IOException {if (input == null || input.size () == 0) பூஜ்ய முயற்சிக்குத் திரும்புக {சரம் str = (சரம்) input.get (0) திரும்பவும் str.toUpperCase ()} பிடிக்கவும் (விதிவிலக்கு இ) new புதிய IOException ஐ வீசவும் ('பிடிபட்ட விதிவிலக்கு செயலாக்க உள்ளீட்டு வரிசை', e)}}}

மொத்த செயல்பாடுகள்:

ஒட்டுமொத்த செயல்பாடுகள் ஈவல் செயல்பாட்டின் மற்றொரு பொதுவான வகை. ஒட்டுமொத்த செயல்பாடுகள் பொதுவாக தொகுக்கப்பட்ட தரவுகளுக்குப் பயன்படுத்தப்படும். மொத்த செயல்பாடு ஒரு பையை எடுத்து அளவிடக்கூடிய மதிப்பை வழங்குகிறது. பல மொத்த செயல்பாடுகளின் சுவாரஸ்யமான மற்றும் மதிப்புமிக்க அம்சம் என்னவென்றால், அவை விநியோகிக்கப்பட்ட முறையில் அதிக அளவில் கணக்கிடப்படலாம். ஹடூப் உலகில், இதன் பொருள் பகுதி கணக்கீடுகளை வரைபடம் மற்றும் இணைப்பான் மூலம் செய்ய முடியும் மற்றும் இறுதி முடிவை ரிடூசரால் கணக்கிட முடியும்.

இயற்கணிதமாக இருக்கும் மொத்த செயல்பாடுகள் அவ்வாறு செயல்படுத்தப்படுகின்றன என்பதை உறுதிப்படுத்துவது மிகவும் முக்கியம். இந்த வகைக்கான எடுத்துக்காட்டுகளில் உள்ளமைக்கப்பட்ட COUNT, MIN, MAX மற்றும் AVERAGE ஆகியவை அடங்கும்.

நிரல் ஜாவாவை விட்டு வெளியேறுவது எப்படி

COUNT ஒரு இயற்கணித செயல்பாட்டின் ஒரு எடுத்துக்காட்டு, அங்கு தரவின் துணைக்குழுவில் உள்ள உறுப்புகளின் எண்ணிக்கையை நாம் எண்ணலாம், பின்னர் இறுதி வெளியீட்டை உருவாக்க எண்ணிக்கையை தொகுக்கலாம். COUNT செயல்பாட்டை செயல்படுத்துவதைப் பார்ப்போம்:

பொது வகுப்பு COUNT ஈவல்ஃபங்க் செயல்படுத்துகிறது இயற்கணிதம் {பொது நீண்ட செயலாக்கம் (டூப்பிள் உள்ளீடு) IOException {வருவாய் எண்ணிக்கை (உள்ளீடு)} பொது சரம் getInitial () {வருவாய் Initial.class.getName ()} பொது சரம் getIntermed () {திரும்ப இடைநிலை கிளாஸ். getName ()} பொது சரம் getFinal () {திரும்ப Final.class.getName ()} நிலையான பொது வகுப்பு தொடக்கமானது EvalFunc ஐ நீட்டிக்கிறது {பொது Tuple exec (Tuple input) IOException வீசுகிறது {திரும்ப TupleFactory.getInstance (). NewTuple (count (input)) public} நிலையான பொது வகுப்பு இடைநிலை EvalFunc ஐ நீட்டிக்கிறது {பொது Tuple exec (Tuple input) IOException ஐ வீசுகிறது {திரும்ப TupleFactory.getInstance (). NewTuple (sum (input))}} நிலையான பொது வகுப்பு இறுதி EvalFunc {public Tuple exec (Tuple input) வீசுகிறது IOException {return sum (input)}} நிலையான பாதுகாக்கப்பட்ட நீண்ட எண்ணிக்கை (Tuple input) ExecException ஐ வீசுகிறது {பொருள் மதிப்புகள் = input.get (0) if (DataBag இன் மதிப்புகள் உதாரணமாக) ((DataBag) மதிப்புகள்) .அளவு () என்றால் (மதிப்புகள் உதாரணமாக வரைபடம்) புதிய நீண்ட ((வரைபடம்) மதிப்புகள்). அளவு ())} நிலையான பாதுகாக்கப்பட்ட நீண்ட தொகை (டுபில் i nput) வீசுகிறது ExecException, NumberFormatException {DataBag values ​​= (DataBag) input.get (0) நீண்ட தொகை = 0 (Iterator (Tuple) it = values.iterator () it.hasNext ()) {Tuple t = it.next ( ) தொகை + = (நீண்ட) t.get (0)} வருமானத் தொகை}}

COUNT இது போன்ற இயற்கணித இடைமுகத்தை செயல்படுத்துகிறது:

பொது இடைமுகம் இயற்கணிதம் {பொது சரம் getInitial () பொது சரம் getIntermed () பொது சரம் getFinal ()}

ஒரு செயல்பாடு இயற்கணிதமாக இருக்க, இது ஈவல்ஃபங்கிலிருந்து பெறப்பட்ட மூன்று வகுப்புகளின் வரையறையைக் கொண்ட இயற்கணித இடைமுகத்தை செயல்படுத்த வேண்டும். ஆரம்ப வகுப்பின் செயலாக்கம் ஒரு முறை அழைக்கப்படுகிறது மற்றும் அசல் உள்ளீட்டு டூப்பிளுக்கு அனுப்பப்படுகிறது என்பது ஒப்பந்தம். அதன் வெளியீடு பகுதி முடிவுகளைக் கொண்ட ஒரு டூப்பிள் ஆகும். இடைநிலை வகுப்பின் செயல்பாட்டு செயல்பாடு பூஜ்ஜியம் அல்லது அதற்கு மேற்பட்ட முறை என அழைக்கப்படலாம் மற்றும் அதன் உள்ளீடாக ஆரம்ப வகுப்பால் தயாரிக்கப்பட்ட பகுதி முடிவுகளைக் கொண்டிருக்கும் அல்லது இடைநிலை வகுப்பின் முன் அழைப்புகள் மூலம் மற்றொரு பகுதி முடிவைக் கொண்டு ஒரு டூப்பிளை உருவாக்குகிறது. இறுதியாக, இறுதி வகுப்பின் நிறைவேற்று செயல்பாடு அழைக்கப்படுகிறது மற்றும் இறுதி முடிவை ஒரு அளவிடுதல் வகையாக அளிக்கிறது.

வடிகட்டி செயல்பாடுகள்:

வடிகட்டி செயல்பாடுகள் பூலியன் மதிப்பை வழங்கும் ஈவல் செயல்பாடுகளாகும். ஃபில்டர் ஆபரேட்டர் அல்லது பின்கண்ட் எக்ஸ்பிரஷன் உட்பட பூலியன் வெளிப்பாடு பொருத்தமான எந்த இடத்திலும் இதைப் பயன்படுத்தலாம். அப்பாச்சி பிக் பூலியனை முழுவதுமாக ஆதரிக்காது, எனவே வடிகட்டி செயல்பாடுகள் ‘முன்னறிவிப்பு’ போன்ற அறிக்கைகளில் தோன்ற முடியாது, அங்கு முடிவுகள் மற்றொரு ஆபரேட்டருக்கு வெளியீடாகும். இருப்பினும், வடிகட்டி செயல்பாடுகளில் வடிகட்டி செயல்பாடுகளைப் பயன்படுத்தலாம்.

கீழே உள்ள எடுத்துக்காட்டு IsEmpty செயல்பாட்டை செயல்படுத்துகிறது:

இறக்குமதி 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 import org.apache.pig.data.DataType / ** * ஒரு பை அல்லது வரைபடம் காலியாக உள்ளதா என்பதை தீர்மானிக்கவும். * / பொது வகுப்பு IsEmpty FilterFunc ஐ நீட்டிக்கிறது public public பொது பூலியன் செயலாக்கத்தை (டூப்பிள் உள்ளீடு) IOException ஐ வீசுகிறது {முயற்சிக்கவும் {பொருள் மதிப்புகள் = உள்ளீடு.ஜெட் (0) என்றால் (டேட்டாபேக் மதிப்புகள் உதாரணம்) ((டேட்டாபேக்) மதிப்புகள்) .அளவு () == 0 வேறு என்றால் (வரைபடத்தின் மதிப்புகள்) திரும்ப ((வரைபடம்) மதிப்புகள்) .அளவு () == 0 வேறு {int errCode = 2102 சரம் msg = 'ஒரு' + DataType.findTypeName (மதிப்புகள்) + 'வெறுமைக்காக சோதிக்க முடியாது.' புதிய ExecException ஐ எறியுங்கள் (msg, errCode, PigException.BUG)}} பிடிக்கவும் (ExecException ee) {வீசுதல் ee}}}