Apache Pig UDF: الجزء 3 - وظائف المتجر

يصف هذا المنشور حول Apache Pig UDF - وظائف المتجر. (Apache Pig UDF: الجزء 3). ألقِ نظرة على وظائف المتجر لـ Apache Pig UDF.

تحتوي فئة StoreFunc abstract على الطرق الرئيسية لتخزين البيانات وفي معظم حالات الاستخدام يجب أن تكفي لتوسيعها. هناك واجهة اختيارية يمكن تنفيذها لتحقيق وظائف موسعة:





المتجر البيانات الوصفية

تحتوي هذه الواجهة على طرق للتفاعل مع أنظمة البيانات الوصفية لتخزين المخطط والإحصاءات. هذه الواجهة اختيارية ويجب تنفيذها فقط إذا كانت البيانات الوصفية بحاجة إلى تخزين.

الطرق التي يجب تجاوزها في StoreFunc موضحة أدناه:



  • getOutputFormat ():

    سيتم استدعاء هذه الطريقة بواسطة Pig للحصول على تنسيق OutputFormat الذي يستخدمه المُخزِّّن. سيتم استدعاء الأساليب الموجودة في OutputFormat بواسطة Pig بنفس الطريقة وفي نفس السياق كما بواسطة Hadoop في برنامج Java لتقليل الخريطة. إذا كان OutputFormat عبارة عن حزمة Hadoop ، فيجب أن يستخدم التطبيق واجهة API جديدة قائمة على org.apache.hadoop.mapreduce. إذا كان تنسيق OutputFormat مخصصًا ، فيجب تنفيذه باستخدام واجهة برمجة التطبيقات الجديدة ضمن org.apache.hadoop.mapreduce. سيتم استدعاء طريقة checkOutputSpecs () الخاصة بتنسيق OutputFormat بواسطة الخنزير للتحقق من موقع الإخراج مقدمًا. سيتم استدعاء هذه الطريقة أيضًا كجزء من تسلسل مكالمات Hadoop عند بدء المهمة. لذلك يجب أن تضمن عمليات التنفيذ إمكانية استدعاء هذه الطريقة عدة مرات دون آثار جانبية غير متسقة.

  • setStoreLocation ():

    تم استدعاء هذه الطريقة بواسطة Pig لإيصال موقع المتجر إلى المخزن. يجب أن يستخدم المُخزن هذه الطريقة لتوصيل نفس المعلومات إلى OutputFormat الأساسي. تسمى هذه الطريقة عدة مرات بواسطة Pig. يجب أن تأخذ التطبيقات في الاعتبار أن هذه الطريقة تسمى عدة مرات ويجب أن تضمن عدم وجود آثار جانبية غير متسقة بسبب المكالمات المتعددة.

  • PreparToWrite ():

    في API الجديد ، تتم كتابة البيانات من خلال OutputFormat الذي يوفره StoreFunc. في PreparToWrite () يتم تمرير RecordWriter المقترن بتنسيق OutputFormat الذي يوفره StoreFunc إلى StoreFunc. يمكن بعد ذلك استخدام RecordWriter بواسطة التنفيذ في putNext () لكتابة مجموعة تمثل سجلًا للبيانات بطريقة يتوقعها RecordWriter.

  • ضع التالي ():

    لم يتغير معنى putNext () وتم استدعاؤه بواسطة Pig runtime لكتابة مجموعة البيانات التالية - في واجهة برمجة التطبيقات الجديدة ، هذه هي الطريقة التي يستخدم فيها التطبيق RecordWriter الأساسي لكتابة Tuple out.

عمليات التنفيذ الافتراضية في المتجر

  • setStoreFuncUDFContextSignature ():

    سيتم استدعاء هذه الطريقة بواسطة Pig في كل من الواجهة الأمامية والنهاية الخلفية لتمرير توقيع فريد إلى المُخزِّّن. يمكن استخدام التوقيع لتخزين أي معلومات في UDFContext والتي يحتاج المُخزِّّن إلى تخزينها بين استدعاءات الطريقة المختلفة في الواجهة الأمامية والنهاية الخلفية. يحتوي التطبيق الافتراضي في StoreFunc على نص فارغ. سيتم استدعاء هذه الطريقة قبل أي طرق أخرى.

  • relToAbsPathForStoreLocation ():

    سيستدعي وقت تشغيل الخنزير هذه الطريقة للسماح للمخزِّّن بتحويل موقع متجر نسبي إلى موقع مطلق. يتم توفير تطبيق في StoreFunc والذي يعالج هذا للمواقع المستندة إلى نظام الملفات.

  • checkSchema ():

    يجب أن تنفذ وظيفة المتجر هذه الوظيفة للتحقق من أن مخططًا معينًا يصف البيانات المراد كتابتها مقبول بالنسبة لها. يحتوي التطبيق الافتراضي في StoreFunc على نص فارغ. سيتم استدعاء هذه الطريقة قبل أي استدعاءات لـ setStoreLocation ().

مثال التنفيذ:

تنفيذ المخزن في المثال ، هو مخزن للبيانات النصية بمحدد سطر مثل '
'و' كمحدد حقل افتراضي (والذي يمكن تجاوزه بتمرير محدد حقل مختلف في المُنشئ) - وهذا مشابه لمخزن PigStorage الحالي في Pig. يستخدم التنفيذ تنسيق OutputFormat - TextOutputFormat المدعوم من Hadoop باعتباره تنسيق OutputFormat الأساسي.

يمتد SimpleTextStorer للفئة العامة StoreFunc {كاتب RecordWriter المحمي = حقل بايت خاص خالٍ من الحقول = '' الخاص الثابت النهائي int BUFFER_SIZE = 1024 سلسلة نهائية ثابتة خاصة UTF8 = 'UTF-8' PigStorage العامة () {} PigStorage العامة (محدد السلسلة) { ) إذا (delimiter.length () == 1) {this.fieldDel = (بايت) delimiter.charAt (0)} وإلا إذا (delimiter.length ()> 1delimiter.charAt (0) == '') {switch ( delimiter.charAt (1)) {case 't': this.fieldDel = (byte) '' break case 'x': fieldDel = Integer.valueOf (delimiter.substring (2)، 16) .byteValue () break case ' u ': this.fieldDel = Integer.valueOf (delimiter.substring (2)). byteValue () break default: حرف واحد ')}} ByteArrayOutputStream mOut = جديد ByteArrayOutputStream (BUFFER_SIZE)Override public void putNext (Tuple f) يطرح IOException {int sz = f.size () لـ (int i = 0 i

لديك سؤال لنا؟ يرجى ذكرها في قسم التعليقات وسنعاود الاتصال بك.

PMI-ACP يستحق ذلك

المنشورات ذات الصلة:



Apache Pig UDF: الجزء 2
Apache Pig UDF: الجزء الأول