Apache Pig UDF: ตอนที่ 3 - ฟังก์ชั่นการจัดเก็บ



โพสต์นี้อธิบายเกี่ยวกับ Apache Pig UDF - Store Functions (Apache Pig UDF: ตอนที่ 3) ดูฟังก์ชั่นร้านค้าของ Apache Pig UDF

คลาสนามธรรม StoreFunc มีวิธีการหลักในการจัดเก็บข้อมูลและสำหรับกรณีการใช้งานส่วนใหญ่ก็ควรจะเพียงพอที่จะขยาย มีอินเทอร์เฟซเสริมที่สามารถใช้งานได้เพื่อให้ได้ฟังก์ชันเพิ่มเติม:





StoreMetadata

อินเทอร์เฟซนี้มีวิธีการโต้ตอบกับระบบข้อมูลเมตาเพื่อจัดเก็บสคีมาและสถิติ อินเทอร์เฟซนี้เป็นทางเลือกและควรนำมาใช้เฉพาะเมื่อต้องการจัดเก็บข้อมูลเมตา

วิธีการที่ต้องลบล้างใน StoreFunc มีอธิบายไว้ด้านล่าง:



การสืบทอดหลายรายการใน java คืออะไร
  • getOutputFormat ():

    Pig จะเรียกเมธอดนี้เพื่อรับ OutputFormat ที่ Storer ใช้ เมธอดใน OutputFormat จะถูกเรียกโดย Pig ในลักษณะเดียวกันและในบริบทเดียวกับ Hadoop ในโปรแกรม Java ลดแผนที่ หาก OutputFormat เป็น Hadoop แบบแพ็กเกจการนำไปใช้งานควรใช้ API ใหม่ที่ใช้ภายใต้ org.apache.hadoop.mapreduce หากเป็น OutputFormat ที่กำหนดเองควรใช้ API ใหม่ภายใต้ org.apache.hadoop.mapreduce วิธี checkOutputSpecs () ของ OutputFormat จะถูกเรียกโดย pig เพื่อตรวจสอบตำแหน่งเอาต์พุตที่อยู่ด้านหน้า วิธีนี้จะถูกเรียกว่าเป็นส่วนหนึ่งของลำดับการโทร Hadoop เมื่อมีการเรียกใช้งาน ดังนั้นการใช้งานควรตรวจสอบให้แน่ใจว่าสามารถเรียกวิธีนี้ได้หลายครั้งโดยไม่มีผลข้างเคียงที่ไม่สอดคล้องกัน

  • setStoreLocation ():

    วิธีนี้เรียกโดย Pig เพื่อสื่อสารตำแหน่งร้านค้าไปยังผู้จัดเก็บ ผู้จัดเก็บควรใช้วิธีนี้เพื่อสื่อสารข้อมูลเดียวกันกับ OutputFormat ที่อยู่ภายใต้ หมูเรียกวิธีนี้หลายครั้ง การใช้งานควรทราบว่าวิธีนี้เรียกหลายครั้งและควรแน่ใจว่าไม่มีผลข้างเคียงที่ไม่สอดคล้องกันเนื่องจากการโทรหลายครั้ง

  • จัดทำ toWrite ():

    ใน API ใหม่การเขียนข้อมูลผ่าน OutputFormat ที่ StoreFunc จัดเตรียมไว้ให้ ใน preparationToWrite () RecordWriter ที่เชื่อมโยงกับ OutputFormat ที่จัดเตรียมโดย StoreFunc จะถูกส่งผ่านไปยัง StoreFunc จากนั้น RecordWriter สามารถใช้โดยการนำไปใช้งานใน putNext () เพื่อเขียนทูเพิลที่แสดงถึงบันทึกข้อมูลในลักษณะที่ RecordWriter คาดไว้

  • ใส่ถัดไป ():

    ความหมายของ putNext () ไม่ได้เปลี่ยนแปลงและเรียกโดย Pig runtime เพื่อเขียนทูเพิลถัดไป - ใน API ใหม่นี่คือวิธีการที่การนำไปใช้งานจะใช้ RecordWriter ที่เป็นพื้นฐานในการเขียน Tuple

การใช้งานเริ่มต้นใน StoreFunc:

  • setStoreFuncUDFContextSignature ():

    วิธีนี้จะถูกเรียกโดย Pig ทั้งในส่วนหน้าและส่วนหลังเพื่อส่งลายเซ็นเฉพาะไปยัง Storer ลายเซ็นสามารถใช้เพื่อจัดเก็บข้อมูลใด ๆ ใน UDFContext ซึ่ง Storer ต้องการจัดเก็บระหว่างการเรียกใช้วิธีการต่างๆในส่วนหน้าและส่วนหลัง การใช้งานเริ่มต้นใน StoreFunc มีเนื้อความว่างเปล่า วิธีนี้จะถูกเรียกใช้ก่อนวิธีอื่นใด

  • relToAbsPathForStoreLocation ():

    Pig runtime จะเรียกเมธอดนี้เพื่อให้ Storer แปลงตำแหน่งร้านค้าสัมพัทธ์เป็นตำแหน่งที่แน่นอน การใช้งานมีให้ใน StoreFunc ซึ่งจัดการสิ่งนี้สำหรับตำแหน่งที่ใช้ FileSystem

  • checkSchema ():

    ฟังก์ชัน Store ควรใช้ฟังก์ชันนี้เพื่อตรวจสอบว่าสคีมาที่ระบุซึ่งอธิบายข้อมูลที่จะเขียนนั้นยอมรับได้ การใช้งานเริ่มต้นใน StoreFunc มีเนื้อความว่างเปล่า วิธีนี้จะถูกเรียกก่อนการเรียกใช้ setStoreLocation ()

ตัวอย่างการใช้งาน:

การใช้งาน storer ในตัวอย่างคือตัวจัดเก็บข้อมูลข้อความที่มีตัวคั่นบรรทัดเป็น '
'และ' เป็นตัวคั่นฟิลด์เริ่มต้น (ซึ่งสามารถแทนที่ได้โดยการส่งตัวคั่นฟิลด์อื่นในตัวสร้าง) ซึ่งจะคล้ายกับตัวแบ่งช่อง PigStorage ปัจจุบันใน Pig การใช้งานใช้ Hadoop ที่มีอยู่รองรับ OutputFormat - TextOutputFormat เป็น OutputFormat ที่อยู่ภายใต้

คลาสสาธารณะ SimpleTextStorer ขยาย StoreFunc {protected RecordWriter writer = null private byte fieldDel = '' private static final int BUFFER_SIZE = 1024 private static final String UTF8 = 'UTF-8' public PigStorage () {} public PigStorage (String delimiter) {this ( ) if (delimiter.length () == 1) {this.fieldDel = (byte) delimiter.charAt (0)} else if (delimiter.length ()> 1delimiter.charAt (0) == '') {สวิตช์ ( 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: throw new RuntimeException (' Unknown delimiter '+ delimiter)}} else {throw new RuntimeException (' PigStorage delimeter ต้องเป็น a single character ')}} ByteArrayOutputStream mOut = new ByteArrayOutputStream (BUFFER_SIZE) @Override โมฆะสาธารณะ putNext (Tuple f) พ่น IOException {int sz = f.size () สำหรับ (int i = 0 i

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นแล้วเราจะติดต่อกลับไป

กระทู้ที่เกี่ยวข้อง:



isa และ hasa ความสัมพันธ์ใน java

Apache Pig UDF: ตอนที่ 2
Apache Pig UDF: ตอนที่ 1