Apache Pig - Panduan Cepat

Apa itu Apache Pig?

Apache Pig adalah abstraksi dari MapReduce. Ini adalah alat / platform yang digunakan untuk menganalisis kumpulan data yang lebih besar yang merepresentasikannya sebagai aliran data. Pig umumnya digunakan denganHadoop; kita dapat melakukan semua operasi manipulasi data di Hadoop menggunakan Apache Pig.

Untuk menulis program analisis data, Pig menyediakan bahasa tingkat tinggi yang dikenal sebagai Pig Latin. Bahasa ini menyediakan berbagai operator yang dapat digunakan pemrogram untuk mengembangkan fungsi mereka sendiri untuk membaca, menulis, dan memproses data.

Untuk menganalisis data menggunakan Apache Pig, programmer perlu menulis skrip menggunakan bahasa Pig Latin. Semua skrip ini secara internal dikonversi ke tugas Peta dan Kurangi. Apache Pig memiliki komponen yang disebutPig Engine yang menerima skrip Pig Latin sebagai masukan dan mengubah skrip tersebut menjadi pekerjaan MapReduce.

Mengapa Kita Membutuhkan Apache Pig?

Pemrogram yang tidak begitu pandai Java biasanya biasanya kesulitan bekerja dengan Hadoop, terutama saat melakukan tugas MapReduce. Apache Pig adalah anugerah bagi semua programmer seperti itu.

  • Menggunakan Pig Latin, programmer dapat melakukan tugas MapReduce dengan mudah tanpa harus mengetikkan kode kompleks di Java.

  • Apache Pig menggunakan multi-query approach, sehingga mengurangi panjang kode. Misalnya, operasi yang mengharuskan Anda mengetik 200 baris kode (LoC) di Java dapat dengan mudah dilakukan hanya dengan mengetik 10 LoC di Apache Pig. Akhirnya Apache Pig mengurangi waktu pengembangan hampir 16 kali lipat.

  • Pig Latin adalah SQL-like language dan mudah untuk mempelajari Apache Pig jika Anda sudah familiar dengan SQL.

  • Apache Pig menyediakan banyak operator bawaan untuk mendukung operasi data seperti gabungan, filter, pemesanan, dll. Selain itu, Apache Pig juga menyediakan tipe data bersarang seperti tupel, tas, dan peta yang hilang dari MapReduce.

Fitur Babi

Apache Pig hadir dengan fitur-fitur berikut -

  • Rich set of operators - Ini menyediakan banyak operator untuk melakukan operasi seperti join, sort, filer, dll.

  • Ease of programming - Pig Latin mirip dengan SQL dan mudah untuk menulis skrip Pig jika Anda mahir dalam SQL.

  • Optimization opportunities - Tugas di Apache Pig mengoptimalkan eksekusinya secara otomatis, sehingga pemrogram hanya perlu fokus pada semantik bahasa.

  • Extensibility - Dengan menggunakan operator yang ada, pengguna dapat mengembangkan fungsinya sendiri untuk membaca, mengolah, dan menulis data.

  • UDF’s - Pig menyediakan fasilitas untuk berkreasi User-defined Functions dalam bahasa pemrograman lain seperti Java dan memanggil atau menyematkannya di Pig Scripts.

  • Handles all kinds of data- Apache Pig menganalisis semua jenis data, baik yang terstruktur maupun yang tidak terstruktur. Ini menyimpan hasil dalam HDFS.

Apache Pig Vs MapReduce

Di bawah ini adalah perbedaan utama antara Apache Pig dan MapReduce.

Apache Pig MapReduce
Apache Pig adalah bahasa aliran data. MapReduce adalah paradigma pemrosesan data.
Ini adalah bahasa tingkat tinggi. MapReduce adalah level rendah dan kaku.
Melakukan operasi Join di Apache Pig cukup sederhana. Sangat sulit di MapReduce untuk melakukan operasi Gabungan di antara kumpulan data.
Setiap programmer pemula dengan pengetahuan dasar SQL dapat bekerja dengan nyaman dengan Apache Pig. Eksposur ke Java harus bekerja dengan MapReduce.
Apache Pig menggunakan pendekatan multi-query, sehingga sangat mengurangi panjang kode. MapReduce akan membutuhkan hampir 20 kali lebih banyak jumlah baris untuk melakukan tugas yang sama.
Tidak perlu kompilasi. Saat eksekusi, setiap operator Apache Pig diubah secara internal menjadi tugas MapReduce. Pekerjaan MapReduce memiliki proses kompilasi yang lama.

Apache Pig Vs SQL

Di bawah ini adalah perbedaan utama antara Apache Pig dan SQL.

Babi SQL
Pig Latin adalah a procedural bahasa. SQL adalah declarative bahasa.
Di Apache Pig, schemabersifat opsional. Kita dapat menyimpan data tanpa merancang skema (nilai disimpan sebagai$01, $02 dll.) Skema wajib ada di SQL.
Model data di Apache Pig adalah nested relational. Model data yang digunakan dalam SQL is flat relational.
Apache Pig memberikan kesempatan terbatas untuk Query optimization. Ada lebih banyak peluang untuk pengoptimalan kueri dalam SQL.

Selain perbedaan di atas, Apache Pig Latin -

  • Memungkinkan perpecahan di dalam pipa.
  • Memungkinkan pengembang menyimpan data di mana saja di dalam pipeline.
  • Menyatakan rencana eksekusi.
  • Menyediakan operator untuk menjalankan fungsi ETL (Ekstrak, Transformasi, dan Muat).

Apache Pig Vs Sarang

Baik Apache Pig dan Hive digunakan untuk membuat pekerjaan MapReduce. Dan dalam beberapa kasus, Hive beroperasi pada HDFS dengan cara yang sama seperti Apache Pig. Dalam tabel berikut, kami telah membuat daftar beberapa poin penting yang membedakan Apache Pig dari Hive.

Apache Pig Sarang lebah
Apache Pig menggunakan bahasa yang disebut Pig Latin. Ini awalnya dibuat diYahoo. Hive menggunakan bahasa yang disebut HiveQL. Ini awalnya dibuat diFacebook.
Pig Latin adalah bahasa aliran data. HiveQL adalah bahasa pemrosesan kueri.
Pig Latin adalah bahasa prosedural dan cocok dengan paradigma pipeline. HiveQL adalah bahasa deklaratif.
Apache Pig dapat menangani data terstruktur, tidak terstruktur, dan semi-terstruktur. Sarang sebagian besar untuk data terstruktur.

Aplikasi Apache Pig

Apache Pig umumnya digunakan oleh data scientist untuk melakukan tugas yang melibatkan pemrosesan ad-hoc dan pembuatan prototipe cepat. Apache Pig digunakan -

  • Untuk memproses sumber data yang sangat besar seperti web log.
  • Untuk melakukan pemrosesan data untuk platform pencarian.
  • Untuk memproses pemuatan data sensitif waktu.

Apache Pig - Sejarah

Di 2006, Apache Pig dikembangkan sebagai proyek penelitian di Yahoo, terutama untuk membuat dan menjalankan pekerjaan MapReduce di setiap kumpulan data. Di2007, Apache Pig bersumber terbuka melalui inkubator Apache. Di2008, rilis pertama Apache Pig keluar. Di2010, Apache Pig lulus sebagai proyek tingkat atas Apache.

Bahasa yang digunakan untuk menganalisis data di Hadoop menggunakan Pig dikenal sebagai Pig Latin. Ini adalah bahasa pemrosesan data tingkat tinggi yang menyediakan serangkaian tipe data dan operator untuk melakukan berbagai operasi pada data.

Untuk melakukan tugas tertentu Pemrogram menggunakan Pig, pemrogram perlu menulis skrip Pig menggunakan bahasa Pig Latin, dan menjalankannya menggunakan salah satu mekanisme eksekusi (Grunt Shell, UDFs, Embedded). Setelah dieksekusi, skrip ini akan melalui serangkaian transformasi yang diterapkan oleh Pig Framework, untuk menghasilkan keluaran yang diinginkan.

Secara internal, Apache Pig mengubah skrip ini menjadi serangkaian pekerjaan MapReduce, dan dengan demikian, membuat pekerjaan programmer menjadi mudah. Arsitektur Apache Pig ditunjukkan di bawah ini.

Komponen Apache Pig

Seperti yang ditunjukkan pada gambar, ada berbagai komponen dalam framework Apache Pig. Mari kita lihat komponen utamanya.

Parser

Awalnya Skrip Babi ditangani oleh Parser. Ia memeriksa sintaks skrip, melakukan pemeriksaan jenis, dan pemeriksaan lain-lain. Output dari parser akan menjadi DAG (grafik asiklik terarah), yang mewakili pernyataan Pig Latin dan operator logika.

Di DAG, operator logika skrip direpresentasikan sebagai node dan aliran data direpresentasikan sebagai edge.

Pengoptimal

Rencana logis (DAG) diteruskan ke pengoptimal logis, yang menjalankan pengoptimalan logis seperti proyeksi dan pushdown.

Penyusun

Kompilator menyusun rencana logis yang dioptimalkan menjadi serangkaian tugas MapReduce.

Mesin eksekusi

Akhirnya pekerjaan MapReduce dikirim ke Hadoop dalam urutan yang diurutkan. Akhirnya, pekerjaan MapReduce ini dijalankan di Hadoop menghasilkan hasil yang diinginkan.

Model Data Pig Latin

Model data Pig Latin sepenuhnya bersarang dan memungkinkan tipe data non-atom yang kompleks seperti map dan tuple. Diberikan di bawah ini adalah representasi diagram dari model data Pig Latin.

Atom

Setiap nilai tunggal dalam Pig Latin, terlepas dari datanya, jenisnya dikenal sebagai Atom. Ini disimpan sebagai string dan dapat digunakan sebagai string dan angka. int, long, float, double, chararray, dan bytearray adalah nilai atom Pig. Sepotong data atau nilai atom sederhana dikenal sebagai afield.

Example - 'raja' atau '30'

Tuple

Rekaman yang dibentuk oleh sekumpulan bidang yang dipesan dikenal sebagai tupel, bidang dapat berupa jenis apa pun. Tupel mirip dengan baris dalam tabel RDBMS.

Example - (Raja, 30)

Tas

Tas adalah satu set tupel yang tidak berurutan. Dengan kata lain, koleksi tupel (non-unik) disebut tas. Setiap tupel dapat memiliki sejumlah bidang (skema fleksibel). Tas diwakili oleh '{}'. Ini mirip dengan tabel di RDBMS, tetapi tidak seperti tabel di RDBMS, tidak perlu setiap tupel berisi jumlah bidang yang sama atau bahwa bidang dalam posisi (kolom) yang sama memiliki jenis yang sama.

Example - {(Raja, 30), (Mohammad, 45)}

Tas bisa menjadi bidang dalam suatu hubungan; dalam konteks itu, itu dikenal sebagaiinner bag.

Example- {Raja, 30, {9848022338, [email protected],} }

Peta

Peta (atau peta data) adalah sekumpulan pasangan nilai-kunci. Itukeyharus bertipe chararray dan harus unik. Ituvaluemungkin dari jenis apa pun. Ini diwakili oleh '[]'

Example - [nama # Raja, usia # 30]

Hubungan

Relasi adalah sekantong tupel. Relasi dalam Pig Latin tidak berurutan (tidak ada jaminan bahwa tupel diproses dalam urutan tertentu).

Bab ini menjelaskan cara mengunduh, menginstal, dan mengatur Apache Pig di sistem Anda.

Prasyarat

Sangat penting bahwa Anda memiliki Hadoop dan Java yang diinstal di sistem Anda sebelum Anda menggunakan Apache Pig. Oleh karena itu, sebelum menginstal Apache Pig, instal Hadoop dan Java dengan mengikuti langkah-langkah yang diberikan di tautan berikut -

http://www.tutorialspoint.com/hadoop/hadoop_enviornment_setup.htm

Unduh Apache Pig

Pertama-tama, unduh Apache Pig versi terbaru dari situs web berikut - https://pig.apache.org/

Langkah 1

Buka beranda situs web Apache Pig. Di bawah bagianNews, klik pada link release page seperti yang ditunjukkan pada snapshot berikut.

Langkah 2

Saat mengklik tautan yang ditentukan, Anda akan diarahkan ke Apache Pig Releaseshalaman. Di halaman ini, di bawahDownload bagian, Anda akan memiliki dua tautan, yaitu, Pig 0.8 and later dan Pig 0.7 and before. Klik pada linkPig 0.8 and later, maka Anda akan diarahkan ke halaman yang memiliki satu set mirror.

LANGKAH 3

Pilih dan klik salah satu cermin ini seperti yang ditunjukkan di bawah ini.

LANGKAH 4

Cermin ini akan membawa Anda ke Pig Releaseshalaman. Halaman ini berisi berbagai versi Apache Pig. Klik versi terbaru di antara mereka.

LANGKAH 5

Di dalam folder ini, Anda akan memiliki file sumber dan biner Apache Pig di berbagai distribusi. Unduh file tar dari file sumber dan biner Apache Pig 0.15,pig0.15.0-src.tar.gz dan pig-0.15.0.tar.gz.

Pasang Apache Pig

Setelah mengunduh perangkat lunak Apache Pig, instal di lingkungan Linux Anda dengan mengikuti langkah-langkah yang diberikan di bawah ini.

Langkah 1

Buat direktori dengan nama Pig di direktori yang sama tempat direktori instalasi Hadoop, Java,dan perangkat lunak lain telah diinstal. (Dalam tutorial kami, kami telah membuat direktori Pig di pengguna bernama Hadoop).

$ mkdir Pig

Langkah 2

Ekstrak file tar yang diunduh seperti yang ditunjukkan di bawah ini.

$ cd Downloads/ 
$ tar zxvf pig-0.15.0-src.tar.gz $ tar zxvf pig-0.15.0.tar.gz

LANGKAH 3

Pindahkan konten pig-0.15.0-src.tar.gz file ke Pig direktori yang dibuat sebelumnya seperti yang ditunjukkan di bawah ini.

$ mv pig-0.15.0-src.tar.gz/* /home/Hadoop/Pig/

Konfigurasikan Apache Pig

Setelah menginstal Apache Pig, kita harus mengkonfigurasinya. Untuk mengkonfigurasi, kita perlu mengedit dua file -bashrc and pig.properties.

file .bashrc

Dalam .bashrc file, atur variabel berikut -

  • PIG_HOME folder ke folder instalasi Apache Pig,

  • PATH variabel lingkungan ke folder bin, dan

  • PIG_CLASSPATH variabel lingkungan ke folder etc (konfigurasi) dari instalasi Hadoop Anda (direktori yang berisi file core-site.xml, hdfs-site.xml dan mapred-site.xml).

export PIG_HOME = /home/Hadoop/Pig
export PATH  = $PATH:/home/Hadoop/pig/bin
export PIG_CLASSPATH = $HADOOP_HOME/conf

pig.properties file

Dalam conf folder Pig, kami memiliki file bernama pig.properties. Di file pig.properties, Anda dapat mengatur berbagai parameter seperti yang diberikan di bawah ini.

pig -h properties

Properti berikut ini didukung -

Logging: verbose = true|false; default is false. This property is the same as -v
       switch brief=true|false; default is false. This property is the same 
       as -b switch debug=OFF|ERROR|WARN|INFO|DEBUG; default is INFO.             
       This property is the same as -d switch aggregate.warning = true|false; default is true. 
       If true, prints count of warnings of each type rather than logging each warning.		 
		 
Performance tuning: pig.cachedbag.memusage=<mem fraction>; default is 0.2 (20% of all memory).
       Note that this memory is shared across all large bags used by the application.         
       pig.skewedjoin.reduce.memusagea=<mem fraction>; default is 0.3 (30% of all memory).
       Specifies the fraction of heap available for the reducer to perform the join.
       pig.exec.nocombiner = true|false; default is false.
           Only disable combiner as a temporary workaround for problems.         
       opt.multiquery = true|false; multiquery is on by default.
           Only disable multiquery as a temporary workaround for problems.
       opt.fetch=true|false; fetch is on by default.
           Scripts containing Filter, Foreach, Limit, Stream, and Union can be dumped without MR jobs.         
       pig.tmpfilecompression = true|false; compression is off by default.             
           Determines whether output of intermediate jobs is compressed.         
       pig.tmpfilecompression.codec = lzo|gzip; default is gzip.
           Used in conjunction with pig.tmpfilecompression. Defines compression type.         
       pig.noSplitCombination = true|false. Split combination is on by default.
           Determines if multiple small files are combined into a single map.         
			  
       pig.exec.mapPartAgg = true|false. Default is false.             
           Determines if partial aggregation is done within map phase, before records are sent to combiner.         
       pig.exec.mapPartAgg.minReduction=<min aggregation factor>. Default is 10.             
           If the in-map partial aggregation does not reduce the output num records by this factor, it gets disabled.
			  
Miscellaneous: exectype = mapreduce|tez|local; default is mapreduce. This property is the same as -x switch
       pig.additional.jars.uris=<comma seperated list of jars>. Used in place of register command.
       udf.import.list=<comma seperated list of imports>. Used to avoid package names in UDF.
       stop.on.failure = true|false; default is false. Set to true to terminate on the first error.         
       pig.datetime.default.tz=<UTC time offset>. e.g. +08:00. Default is the default timezone of the host.
           Determines the timezone used to handle datetime datatype and UDFs.
Additionally, any Hadoop property can be specified.

Memverifikasi Instalasi

Verifikasi instalasi Apache Pig dengan mengetikkan perintah versi. Jika installasi berhasil maka Anda akan mendapatkan versi Apache Pig seperti gambar dibawah ini.

$ pig –version 
 
Apache Pig version 0.15.0 (r1682971)  
compiled Jun 01 2015, 11:44:35

Di bab sebelumnya, kami menjelaskan cara menginstal Apache Pig. Pada bab ini, kita akan membahas cara menjalankan Apache Pig.

Mode Eksekusi Apache Pig

Anda dapat menjalankan Apache Pig dalam dua mode, yaitu, Local Mode dan HDFS mode.

Mode lokal

Dalam mode ini, semua file diinstal dan dijalankan dari host lokal dan sistem file lokal Anda. Tidak perlu Hadoop atau HDFS. Mode ini umumnya digunakan untuk tujuan pengujian.

Mode MapReduce

Mode MapReduce adalah dimana kita memuat atau mengolah data yang ada di Hadoop File System (HDFS) menggunakan Apache Pig. Dalam mode ini, setiap kali kita menjalankan pernyataan Pig Latin untuk memproses data, tugas MapReduce dipanggil di back-end untuk melakukan operasi tertentu pada data yang ada di HDFS.

Mekanisme Eksekusi Apache Pig

Skrip Apache Pig dapat dijalankan dengan tiga cara, yaitu mode interaktif, mode batch, dan mode tertanam.

  • Interactive Mode(Grunt shell) - Anda dapat menjalankan Apache Pig dalam mode interaktif menggunakan shell Grunt. Di shell ini, Anda bisa memasukkan pernyataan Pig Latin dan mendapatkan hasilnya (menggunakan operator Dump).

  • Batch Mode (Script) - Anda dapat menjalankan Apache Pig dalam mode Batch dengan menulis script Pig Latin dalam satu file dengan .pig perpanjangan.

  • Embedded Mode (UDF) - Apache Pig menyediakan ketentuan untuk mendefinisikan fungsi kita sendiri (User Defined Functions) dalam bahasa pemrograman seperti Java, dan menggunakannya dalam skrip kami.

Memanggil Grunt Shell

Anda dapat memanggil shell Grunt dalam mode yang diinginkan (lokal / MapReduce) menggunakan −x pilihan seperti yang ditunjukkan di bawah ini.

Mode lokal Mode MapReduce

Command −

$ ./pig –x lokal

Command −

$ ./pig -x mapreduce

Output -

Output -

Salah satu dari perintah ini memberi Anda prompt shell Grunt seperti yang ditunjukkan di bawah ini.

grunt>

Anda dapat keluar dari shell Grunt menggunakan ‘ctrl + d’.

Setelah menjalankan shell Grunt, Anda dapat menjalankan skrip Pig dengan langsung memasukkan pernyataan Pig Latin di dalamnya.

grunt> customers = LOAD 'customers.txt' USING PigStorage(',');

Menjalankan Apache Pig dalam Mode Batch

Anda dapat menulis seluruh skrip Pig Latin dalam sebuah file dan menjalankannya menggunakan –x command. Misalkan kita memiliki skrip Pig dalam file bernamasample_script.pig seperti gambar dibawah.

Sample_script.pig

student = LOAD 'hdfs://localhost:9000/pig_data/student.txt' USING
   PigStorage(',') as (id:int,name:chararray,city:chararray);
  
Dump student;

Sekarang, Anda dapat menjalankan skrip pada file di atas seperti yang ditunjukkan di bawah ini.

Mode lokal Mode MapReduce
$ babi -x lokal Sample_script.pig $ pig -x mapreduce Sample_script.pig

Note - Kami akan membahas secara rinci cara menjalankan skrip Pig Bach mode dan masuk embedded mode di bab-bab selanjutnya.

Setelah menjalankan shell Grunt, Anda dapat menjalankan skrip Pig di shell. Selain itu, ada perintah shell dan utilitas tertentu yang disediakan oleh shell Grunt. Bab ini menjelaskan shell dan perintah utilitas yang disediakan oleh shell Grunt.

Note - Di beberapa bagian bab ini, perintah seperti Load dan Storedigunakan. Lihat bab masing-masing untuk mendapatkan informasi lebih rinci tentang mereka.

Perintah Shell

Shell Grunt dari Apache Pig terutama digunakan untuk menulis skrip Pig Latin. Sebelum itu, kita bisa memanggil perintah shell menggunakansh dan fs.

sh Perintah

Menggunakan shperintah, kita dapat menjalankan perintah shell apa pun dari shell Grunt. Menggunakansh perintah dari shell Grunt, kita tidak dapat menjalankan perintah yang merupakan bagian dari lingkungan shell (ex - cd).

Syntax

Diberikan di bawah ini adalah sintaks sh perintah.

grunt> sh shell command parameters

Example

Kami dapat meminta ls perintah shell Linux dari shell Grunt menggunakan shpilihan seperti yang ditunjukkan di bawah ini. Dalam contoh ini, ini mencantumkan file di file/pig/bin/ direktori.

grunt> sh ls
   
pig 
pig_1444799121955.log 
pig.cmd 
pig.py

fs Perintah

Menggunakan fs perintah, kita dapat memanggil perintah FsShell dari shell Grunt.

Syntax

Diberikan di bawah ini adalah sintaks fs perintah.

grunt> sh File System command parameters

Example

Kita dapat memanggil perintah ls HDFS dari shell Grunt menggunakan perintah fs. Dalam contoh berikut, ini mencantumkan file di direktori root HDFS.

grunt> fs –ls
  
Found 3 items
drwxrwxrwx   - Hadoop supergroup          0 2015-09-08 14:13 Hbase
drwxr-xr-x   - Hadoop supergroup          0 2015-09-09 14:52 seqgen_data
drwxr-xr-x   - Hadoop supergroup          0 2015-09-08 11:30 twitter_data

Dengan cara yang sama, kita bisa memanggil semua perintah shell sistem file lain dari shell Grunt menggunakan fs perintah.

Perintah Utilitas

Shell Grunt menyediakan sekumpulan perintah utilitas. Ini termasuk perintah utilitas seperticlear, help, history, quit, dan set; dan perintah sepertiexec, kill, dan rununtuk mengontrol Pig dari cangkang Grunt. Diberikan di bawah ini adalah deskripsi dari perintah utilitas yang disediakan oleh shell Grunt.

Perintah yang jelas

Itu clear perintah digunakan untuk membersihkan layar dari shell Grunt.

Syntax

Anda dapat membersihkan layar dari grunt shell menggunakan clear perintah seperti yang ditunjukkan di bawah ini.

grunt> clear

membantu Command

Itu help perintah memberi Anda daftar perintah Pig atau properti Pig.

Usage

Anda bisa mendapatkan daftar perintah Pig menggunakan help perintah seperti yang ditunjukkan di bawah ini.

grunt> help

Commands: <pig latin statement>; - See the PigLatin manual for details:
http://hadoop.apache.org/pig
  
File system commands:fs <fs arguments> - Equivalent to Hadoop dfs  command:
http://hadoop.apache.org/common/docs/current/hdfs_shell.html
	 
Diagnostic Commands:describe <alias>[::<alias] - Show the schema for the alias.
Inner aliases can be described as A::B.
    explain [-script <pigscript>] [-out <path>] [-brief] [-dot|-xml] 
       [-param <param_name>=<pCram_value>]
       [-param_file <file_name>] [<alias>] - 
       Show the execution plan to compute the alias or for entire script.
       -script - Explain the entire script.
       -out - Store the output into directory rather than print to stdout.
       -brief - Don't expand nested plans (presenting a smaller graph for overview).
       -dot - Generate the output in .dot format. Default is text format.
       -xml - Generate the output in .xml format. Default is text format.
       -param <param_name - See parameter substitution for details.
       -param_file <file_name> - See parameter substitution for details.
       alias - Alias to explain.
       dump <alias> - Compute the alias and writes the results to stdout.

Utility Commands: exec [-param <param_name>=param_value] [-param_file <file_name>] <script> -
       Execute the script with access to grunt environment including aliases.
       -param <param_name - See parameter substitution for details.
       -param_file <file_name> - See parameter substitution for details.
       script - Script to be executed.
    run [-param <param_name>=param_value] [-param_file <file_name>] <script> -
       Execute the script with access to grunt environment.
		 -param <param_name - See parameter substitution for details.         
       -param_file <file_name> - See parameter substitution for details.
       script - Script to be executed.
    sh  <shell command> - Invoke a shell command.
    kill <job_id> - Kill the hadoop job specified by the hadoop job id.
    set <key> <value> - Provide execution parameters to Pig. Keys and values are case sensitive.
       The following keys are supported:
       default_parallel - Script-level reduce parallelism. Basic input size heuristics used 
       by default.
       debug - Set debug on or off. Default is off.
       job.name - Single-quoted name for jobs. Default is PigLatin:<script name>     
       job.priority - Priority for jobs. Values: very_low, low, normal, high, very_high.
       Default is normal stream.skippath - String that contains the path.
       This is used by streaming any hadoop property.
    help - Display this message.
    history [-n] - Display the list statements in cache.
       -n Hide line numbers.
    quit - Quit the grunt shell.

sejarah Command

Perintah ini menampilkan daftar pernyataan yang dieksekusi / digunakan sejauh ini sejak Grunt sell dipanggil.

Usage

Asumsikan kita telah mengeksekusi tiga pernyataan sejak membuka shell Grunt.

grunt> customers = LOAD 'hdfs://localhost:9000/pig_data/customers.txt' USING PigStorage(',');
 
grunt> orders = LOAD 'hdfs://localhost:9000/pig_data/orders.txt' USING PigStorage(',');
 
grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student.txt' USING PigStorage(',');

Kemudian, gunakan history perintah akan menghasilkan keluaran sebagai berikut.

grunt> history

customers = LOAD 'hdfs://localhost:9000/pig_data/customers.txt' USING PigStorage(','); 
  
orders = LOAD 'hdfs://localhost:9000/pig_data/orders.txt' USING PigStorage(',');
   
student = LOAD 'hdfs://localhost:9000/pig_data/student.txt' USING PigStorage(',');

atur Command

Itu set perintah digunakan untuk menampilkan / menetapkan nilai ke kunci yang digunakan di Pig.

Usage

Dengan menggunakan perintah ini, Anda dapat mengatur nilai ke kunci berikut.

Kunci Deskripsi dan nilai
default_parallel Anda dapat menyetel jumlah reduksi untuk pekerjaan peta dengan meneruskan bilangan bulat apa pun sebagai nilai ke kunci ini.
debug Anda dapat mematikan atau menghidupkan freature debugging di Pig dengan mengaktifkan / menonaktifkan kunci ini.
job.name Anda dapat menyetel nama Pekerjaan ke pekerjaan yang dibutuhkan dengan meneruskan nilai string ke kunci ini.
job.priority

Anda dapat menyetel prioritas pekerjaan ke pekerjaan dengan meneruskan salah satu nilai berikut ke kunci ini -

  • very_low
  • low
  • normal
  • high
  • very_high
stream.skippath Untuk streaming, Anda dapat mengatur jalur dari mana data tidak akan ditransfer, dengan meneruskan jalur yang diinginkan dalam bentuk string ke kunci ini.

keluar dari Command

Anda dapat keluar dari shell Grunt menggunakan perintah ini.

Usage

Keluar dari shell Grunt seperti yang ditunjukkan di bawah ini.

grunt> quit

Sekarang mari kita lihat perintah yang digunakan untuk mengontrol Apache Pig dari shell Grunt.

exec Command

Menggunakan exec perintah, kita dapat mengeksekusi skrip Pig dari shell Grunt.

Syntax

Diberikan di bawah ini adalah sintaks dari perintah utilitas exec.

grunt> exec [–param param_name = param_value] [–param_file file_name] [script]

Example

Mari kita asumsikan ada file bernama student.txt dalam /pig_data/ direktori HDFS dengan konten berikut.

Student.txt

001,Rajiv,Hyderabad
002,siddarth,Kolkata
003,Rajesh,Delhi

Dan, asumsikan kita memiliki file script bernama sample_script.pig dalam /pig_data/ direktori HDFS dengan konten berikut.

Sample_script.pig

student = LOAD 'hdfs://localhost:9000/pig_data/student.txt' USING PigStorage(',') 
   as (id:int,name:chararray,city:chararray);
  
Dump student;

Sekarang, mari kita jalankan skrip di atas dari shell Grunt menggunakan exec perintah seperti yang ditunjukkan di bawah ini.

grunt> exec /sample_script.pig

Output

Itu exec perintah mengeksekusi skrip di sample_script.pig. Seperti yang diarahkan dalam skrip, itu memuatstudent.txt file ke Pig dan memberi Anda hasil dari operator Dump yang menampilkan konten berikut.

(1,Rajiv,Hyderabad)
(2,siddarth,Kolkata)
(3,Rajesh,Delhi)

bunuh Command

Anda dapat menghentikan pekerjaan dari shell Grunt menggunakan perintah ini.

Syntax

Diberikan di bawah ini adalah sintaks dari kill perintah.

grunt> kill JobId

Example

Misalkan ada pekerjaan Pig yang sedang berjalan yang memiliki id Id_0055, Anda dapat membunuhnya dari shell Grunt menggunakan kill perintah, seperti yang ditunjukkan di bawah ini.

grunt> kill Id_0055

jalankan Command

Anda dapat menjalankan skrip Pig dari shell Grunt menggunakan run perintah

Syntax

Diberikan di bawah ini adalah sintaks dari run perintah.

grunt> run [–param param_name = param_value] [–param_file file_name] script

Example

Mari kita asumsikan ada file bernama student.txt dalam /pig_data/ direktori HDFS dengan konten berikut.

Student.txt

001,Rajiv,Hyderabad
002,siddarth,Kolkata
003,Rajesh,Delhi

Dan, asumsikan kita memiliki file script bernama sample_script.pig di sistem file lokal dengan konten berikut.

Sample_script.pig

student = LOAD 'hdfs://localhost:9000/pig_data/student.txt' USING
   PigStorage(',') as (id:int,name:chararray,city:chararray);

Sekarang, mari kita jalankan skrip di atas dari shell Grunt menggunakan perintah run seperti yang ditunjukkan di bawah ini.

grunt> run /sample_script.pig

Anda dapat melihat output dari skrip menggunakan Dump operator seperti gambar dibawah.

grunt> Dump;

(1,Rajiv,Hyderabad)
(2,siddarth,Kolkata)
(3,Rajesh,Delhi)

Note - Perbedaan antara exec dan run perintah adalah jika kita menggunakan run, pernyataan dari skrip tersedia di riwayat perintah.

Pig Latin adalah bahasa yang digunakan untuk menganalisis data di Hadoop menggunakan Apache Pig. Dalam bab ini, kita akan membahas dasar-dasar Pig Latin seperti pernyataan Pig Latin, tipe data, operator umum dan relasional, dan UDF Pig Latin.

Pig Latin - Model Data

Seperti yang dibahas di bab sebelumnya, model data Pig sepenuhnya bersarang. SEBUAHRelationadalah struktur terluar dari model data Pig Latin. Dan itu adalah abag dimana -

  • Tas adalah koleksi tupel.
  • Tupel adalah kumpulan bidang yang terurut.
  • Bidang adalah sepotong data.

Pig Latin - Statemets

Sedangkan pengolahan data menggunakan Pig Latin, statements adalah konstruksi dasar.

  • Pernyataan ini bekerja dengan relations. Mereka termasukexpressions dan schemas.

  • Setiap pernyataan diakhiri dengan titik koma (;).

  • Kami akan melakukan berbagai operasi menggunakan operator yang disediakan oleh Pig Latin, melalui pernyataan.

  • Kecuali LOAD dan STORE, saat melakukan semua operasi lainnya, pernyataan Pig Latin mengambil relasi sebagai masukan dan menghasilkan relasi lain sebagai keluaran.

  • Segera setelah Anda memasukkan file Loadpernyataan di shell Grunt, pemeriksaan semantiknya akan dilakukan. Untuk melihat konten skema, Anda perlu menggunakanDumpoperator. Hanya setelah melakukandump operasi, pekerjaan MapReduce untuk memuat data ke dalam sistem file akan dilakukan.

Contoh

Diberikan di bawah ini adalah pernyataan Pig Latin, yang memuat data ke Apache Pig.

grunt> Student_data = LOAD 'student_data.txt' USING PigStorage(',')as 
   ( id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray );

Pig Latin - Tipe data

Diberikan di bawah tabel menjelaskan tipe data Pig Latin.

SN Tipe data Deskripsi & Contoh
1 int

Merepresentasikan integer 32-bit yang ditandatangani.

Example : 8

2 panjang

Merepresentasikan integer 64-bit yang ditandatangani.

Example : 5L

3 mengapung

Merepresentasikan floating point 32-bit yang ditandatangani.

Example : 5.5F

4 dua kali lipat

Merepresentasikan floating point 64-bit.

Example : 10.5

5 chararray

Merepresentasikan larik karakter (string) dalam format Unicode UTF-8.

Example : 'titik tutorial'

6 Bytearray

Merepresentasikan larik Byte (blob).

7 Boolean

Merepresentasikan nilai Boolean.

Example : benar salah.

8 Tanggal Waktu

Merupakan tanggal-waktu.

Example : 1970-01-01T00: 00: 00.000 + 00: 00

9 Biginteger

Mewakili Java BigInteger.

Example : 60708090709

10 Desimal besar

Merepresentasikan Java BigDecimal

Example : 185.98376256272893883

Jenis Kompleks
11 Tuple

Tupel adalah kumpulan bidang yang terurut.

Example : (raja, 30)

12 Tas

Tas adalah koleksi tupel.

Example : {(raju, 30), (Mohhammad, 45)}

13 Peta

Peta adalah sekumpulan pasangan nilai-kunci.

Example : ['name' # 'Raju', 'age' # 30]

Nilai Null

Nilai untuk semua tipe data di atas bisa NULL. Apache Pig memperlakukan nilai null dengan cara yang sama seperti SQL.

Nol bisa menjadi nilai yang tidak diketahui atau nilai yang tidak ada. Ini digunakan sebagai placeholder untuk nilai opsional. Nol ini dapat terjadi secara alami atau dapat menjadi hasil dari suatu operasi.

Pig Latin - Operator Aritmatika

Tabel berikut menjelaskan operator aritmatika Pig Latin. Misalkan a = 10 dan b = 20.

Operator Deskripsi Contoh
+

Addition - Menambahkan nilai di kedua sisi operator

a + b akan menghasilkan 30
-

Subtraction - Mengurangi operan tangan kanan dari operan tangan kiri

a - b akan menghasilkan −10
*

Multiplication - Mengalikan nilai di kedua sisi operator

a * b akan memberi 200
/

Division - Membagi operan tangan kiri dengan operan tangan kanan

b / a akan memberi 2
%

Modulus - Membagi operan tangan kiri dengan operan tangan kanan dan mengembalikan sisanya

b% a akan memberi 0
? :

Bincond- Mengevaluasi operator Boolean. Ini memiliki tiga operan seperti yang ditunjukkan di bawah ini.

variabel x = (ekspresi)? value1 jika benar :value2 jika salah .

b = (a == 1)? 20:30;

jika a = 1 nilai b adalah 20.

jika a! = 1 nilai b adalah 30.

KASUS

KAPAN

KEMUDIAN

SELESAI AKHIR

Case - Operator case setara dengan operator bincond bersarang.

KASUS f2% 2

KAPAN 0 LALU 'genap'

KETIKA 1 LALU 'ganjil'

AKHIR

Pig Latin - Operator Pembanding

Tabel berikut menjelaskan operator perbandingan Pig Latin.

Operator Deskripsi Contoh
==

Equal- Memeriksa apakah nilai dari dua operan sama atau tidak; jika ya, maka kondisinya menjadi benar.

(a = b) tidak benar
! =

Not Equal- Memeriksa apakah nilai dari dua operan sama atau tidak. Jika nilainya tidak sama, maka kondisi menjadi benar.

(a! = b) benar.
>

Greater than- Memeriksa apakah nilai operan kiri lebih besar dari nilai operan kanan. Jika ya, maka kondisinya menjadi benar.

(a> b) tidak benar.
<

Less than- Memeriksa apakah nilai operan kiri kurang dari nilai operan kanan. Jika ya, maka kondisinya menjadi benar.

(a <b) benar.
> =

Greater than or equal to- Memeriksa apakah nilai operan kiri lebih besar dari atau sama dengan nilai operan kanan. Jika ya, maka kondisinya menjadi benar.

(a> = b) tidak benar.
<=

Less than or equal to- Memeriksa apakah nilai operan kiri kurang dari atau sama dengan nilai operan kanan. Jika ya, maka kondisinya menjadi benar.

(a <= b) benar.
korek api

Pattern matching - Memeriksa apakah senar di sisi kiri cocok dengan konstanta di sisi kanan.

f1 cocok dengan '. * tutorial. *'

Pig Latin - Operator Konstruksi Tipe

Tabel berikut menjelaskan operator konstruksi Jenis Pig Latin.

Operator Deskripsi Contoh
()

Tuple constructor operator - Operator ini digunakan untuk membuat tupel.

(Raju, 30)
{}

Bag constructor operator - Operator ini biasa membuat tas.

{(Raju, 30), (Mohammad, 45)}
[]

Map constructor operator - Operator ini digunakan untuk membuat tupel.

[nama # Raja, usia # 30]

Pig Latin - Operasi Relasional

Tabel berikut menjelaskan operator relasional Pig Latin.

Operator Deskripsi
Loading and Storing
BEBAN Untuk memuat data dari sistem file (lokal / HDFS) ke dalam suatu relasi.
TOKO Untuk menyimpan relasi ke sistem file (lokal / HDFS).
Penyaringan
SARING Untuk menghapus baris yang tidak diinginkan dari suatu relasi.
BERBEDA Untuk menghapus baris duplikat dari suatu relasi.
FOREACH, BUAT Untuk menghasilkan transformasi data berdasarkan kolom data.
ALIRAN Untuk mengubah relasi menggunakan program eksternal.
Pengelompokan dan Bergabung
IKUTI Untuk menggabungkan dua atau lebih relasi.
KELOMPOK Untuk mengelompokkan data dalam dua atau lebih relasi.
KELOMPOK Untuk mengelompokkan data dalam satu relasi.
MENYEBERANG Untuk membuat produk silang dari dua atau lebih relasi.
Penyortiran
MEMESAN Untuk mengatur relasi dalam urutan yang diurutkan berdasarkan satu atau beberapa bidang (naik atau turun).
MEMBATASI Untuk mendapatkan sejumlah tupel dari suatu relasi.
Menggabungkan dan Memisahkan
PERSATUAN Untuk menggabungkan dua atau lebih relasi menjadi satu relasi.
MEMBAGI Untuk membagi satu relasi menjadi dua atau lebih relasi.
Operator Diagnostik
MEMBUANG Untuk mencetak konten relasi di konsol.
MENGGAMBARKAN Untuk mendeskripsikan skema relasi.
MENJELASKAN Untuk melihat rencana eksekusi logis, fisik, atau MapReduce untuk menghitung relasi.
MENJELASKAN Untuk melihat eksekusi langkah demi langkah dari serangkaian pernyataan.

Secara umum, Apache Pig bekerja di atas Hadoop. Ini adalah alat analisis yang menganalisis kumpulan data besar yang ada diHadoop File System. Untuk menganalisis data menggunakan Apache Pig, pertama-tama kita harus memuat data ke Apache Pig. Bab ini menjelaskan cara memuat data ke Apache Pig dari HDFS.

Mempersiapkan HDFS

Dalam mode MapReduce, Pig membaca (memuat) data dari HDFS dan menyimpan kembali hasilnya dalam HDFS. Oleh karena itu, mari kita mulai HDFS dan membuat contoh data berikut dalam HDFS.

Identitas Siswa Nama depan Nama keluarga Telepon Kota
001 Rajiv Reddy 9848022337 Hyderabad
002 siddarth Battacharya 9848022338 Kolkata
003 Rajesh Khanna 9848022339 Delhi
004 Preethi Agarwal 9848022330 Pune
005 Trupthi Mohanthy 9848022336 Bhuwaneshwar
006 Archana Mishra 9848022335 Chennai

Dataset di atas berisi detail pribadi seperti id, nama depan, nama belakang, nomor telepon dan kota, dari enam siswa.

Langkah 1: Memverifikasi Hadoop

Pertama-tama, verifikasi instalasi menggunakan perintah versi Hadoop, seperti yang ditunjukkan di bawah ini.

$ hadoop version

Jika sistem Anda berisi Hadoop, dan jika Anda telah mengatur variabel PATH, maka Anda akan mendapatkan output berikut -

Hadoop 2.6.0 
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 
e3496499ecb8d220fba99dc5ed4c99c8f9e33bb1 
Compiled by jenkins on 2014-11-13T21:10Z 
Compiled with protoc 2.5.0 
From source with checksum 18e43357c8f927c0695f1e9522859d6a 
This command was run using /home/Hadoop/hadoop/share/hadoop/common/hadoop
common-2.6.0.jar

Langkah 2: Memulai HDFS

Jelajahi sbin direktori Hadoop dan mulai yarn dan Hadoop dfs (sistem file terdistribusi) seperti yang ditunjukkan di bawah ini.

cd /$Hadoop_Home/sbin/ 
$ start-dfs.sh 
localhost: starting namenode, logging to /home/Hadoop/hadoop/logs/hadoopHadoop-namenode-localhost.localdomain.out 
localhost: starting datanode, logging to /home/Hadoop/hadoop/logs/hadoopHadoop-datanode-localhost.localdomain.out 
Starting secondary namenodes [0.0.0.0] 
starting secondarynamenode, logging to /home/Hadoop/hadoop/logs/hadoop-Hadoopsecondarynamenode-localhost.localdomain.out
 
$ start-yarn.sh 
starting yarn daemons 
starting resourcemanager, logging to /home/Hadoop/hadoop/logs/yarn-Hadoopresourcemanager-localhost.localdomain.out 
localhost: starting nodemanager, logging to /home/Hadoop/hadoop/logs/yarnHadoop-nodemanager-localhost.localdomain.out

Langkah 3: Buat Direktori di HDFS

Di Hadoop DFS, Anda dapat membuat direktori menggunakan perintah mkdir. Buat direktori baru di HDFS dengan namaPig_Data di jalur yang diperlukan seperti yang ditunjukkan di bawah ini.

$cd /$Hadoop_Home/bin/ 
$ hdfs dfs -mkdir hdfs://localhost:9000/Pig_Data

Langkah 4: Menempatkan data di HDFS

File input Pig berisi setiap tuple / record dalam baris individual. Dan entitas rekaman dipisahkan oleh pembatas (Dalam contoh kami, kami menggunakan“,”).

Di sistem file lokal, buat file input student_data.txt berisi data seperti gambar di bawah ini.

001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai.

Sekarang, pindahkan file dari sistem file lokal ke HDFS menggunakan putperintah seperti yang ditunjukkan di bawah ini. (Kamu dapat memakaicopyFromLocal perintah juga.)

$ cd $HADOOP_HOME/bin $ hdfs dfs -put /home/Hadoop/Pig/Pig_Data/student_data.txt dfs://localhost:9000/pig_data/

Memverifikasi file

Anda bisa menggunakan cat perintah untuk memverifikasi apakah file telah dipindahkan ke HDFS, seperti yang ditunjukkan di bawah ini.

$ cd $HADOOP_HOME/bin
$ hdfs dfs -cat hdfs://localhost:9000/pig_data/student_data.txt

Keluaran

Anda dapat melihat isi file seperti gambar di bawah ini.

15/10/01 12:16:55 WARN util.NativeCodeLoader: Unable to load native-hadoop
library for your platform... using builtin-java classes where applicable
  
001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai

Operator Beban

Anda dapat memuat data ke Apache Pig dari sistem file (HDFS / Lokal) menggunakan LOAD operator dari Pig Latin.

Sintaksis

Pernyataan beban terdiri dari dua bagian yang dibagi dengan operator “=”. Di sisi kiri, kita perlu menyebutkan nama relasinyawhere kami ingin menyimpan data, dan di sisi kanan, kami harus mendefinisikan howkami menyimpan data. Diberikan di bawah ini adalah sintaks dariLoad operator.

Relation_name = LOAD 'Input file path' USING function as schema;

Dimana,

  • relation_name - Kami harus menyebutkan relasi tempat kami ingin menyimpan data.

  • Input file path- Kami harus menyebutkan direktori HDFS tempat file disimpan. (Dalam mode MapReduce)

  • function - Kita harus memilih fungsi dari kumpulan fungsi beban yang disediakan oleh Apache Pig (BinStorage, JsonLoader, PigStorage, TextLoader).

  • Schema- Kami harus menentukan skema data. Kami dapat menentukan skema yang diperlukan sebagai berikut -

(column1 : data type, column2 : data type, column3 : data type);

Note- Kami memuat data tanpa menentukan skema. Dalam hal ini, kolom akan dialamatkan sebagai $ 01, $ 02, dll… (centang).

Contoh

Sebagai contoh, mari kita muat datanya student_data.txt di Pig di bawah skema bernama Student menggunakan LOAD perintah.

Mulai Pig Grunt Shell

Pertama-tama, buka terminal Linux. Mulai shell Pig Grunt dalam mode MapReduce seperti yang ditunjukkan di bawah ini.

$ Pig –x mapreduce

Ini akan memulai shell Pig Grunt seperti yang ditunjukkan di bawah ini.

15/10/01 12:33:37 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL
15/10/01 12:33:37 INFO pig.ExecTypeProvider: Trying ExecType : MAPREDUCE
15/10/01 12:33:37 INFO pig.ExecTypeProvider: Picked MAPREDUCE as the ExecType

2015-10-01 12:33:38,080 [main] INFO  org.apache.pig.Main - Apache Pig version 0.15.0 (r1682971) compiled Jun 01 2015, 11:44:35
2015-10-01 12:33:38,080 [main] INFO  org.apache.pig.Main - Logging error messages to: /home/Hadoop/pig_1443683018078.log
2015-10-01 12:33:38,242 [main] INFO  org.apache.pig.impl.util.Utils - Default bootup file /home/Hadoop/.pigbootup not found
  
2015-10-01 12:33:39,630 [main]
INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://localhost:9000
 
grunt>

Jalankan Pernyataan Beban

Sekarang muat data dari file student_data.txt menjadi Pig dengan menjalankan pernyataan Pig Latin berikut di shell Grunt.

grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt' 
   USING PigStorage(',')
   as ( id:int, firstname:chararray, lastname:chararray, phone:chararray, 
   city:chararray );

Berikut adalah uraian dari pernyataan di atas.

Nama relasi Kami telah menyimpan data dalam skema student.
Jalur file masukan Kami membaca data dari file student_data.txt, yang ada di direktori / pig_data / dari HDFS.
Fungsi penyimpanan Kami telah menggunakan PigStorage()fungsi. Ini memuat dan menyimpan data sebagai file teks terstruktur. Dibutuhkan pembatas yang digunakan setiap entitas tupel dipisahkan, sebagai parameter. Secara default, ini mengambil '\ t' sebagai parameter.
skema

Kami telah menyimpan data menggunakan skema berikut.

kolom Indo nama depan nama keluarga telepon kota
tipe data int array karakter array karakter array karakter array karakter

Note - Itu loadpernyataan hanya akan memuat data ke dalam relasi yang ditentukan di Pig. Untuk memverifikasi eksekusi fileLoad pernyataan, Anda harus menggunakan Diagnostic Operators yang dibahas di bab selanjutnya.

Di bab sebelumnya, kita mempelajari cara memuat data ke Apache Pig. Anda dapat menyimpan data yang dimuat dalam sistem file menggunakanstoreoperator. Bab ini menjelaskan cara menyimpan data di Apache Pig menggunakanStore operator.

Sintaksis

Diberikan di bawah ini adalah sintaks dari pernyataan Store.

STORE Relation_name INTO ' required_directory_path ' [USING function];

Contoh

Asumsikan kita memiliki file student_data.txt dalam HDFS dengan konten berikut.

001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai.

Dan kami telah membacanya menjadi suatu relasi student menggunakan operator LOAD seperti yang ditunjukkan di bawah ini.

grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt' 
   USING PigStorage(',')
   as ( id:int, firstname:chararray, lastname:chararray, phone:chararray, 
   city:chararray );

Sekarang, mari kita simpan relasi tersebut di direktori HDFS “/pig_Output/” seperti gambar dibawah.

grunt> STORE student INTO ' hdfs://localhost:9000/pig_Output/ ' USING PigStorage (',');

Keluaran

Setelah menjalankan storepernyataan, Anda akan mendapatkan output berikut. Direktori dibuat dengan nama yang ditentukan dan data akan disimpan di dalamnya.

2015-10-05 13:05:05,429 [main] INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.
MapReduceLau ncher - 100% complete
2015-10-05 13:05:05,429 [main] INFO  org.apache.pig.tools.pigstats.mapreduce.SimplePigStats - 
Script Statistics:
   
HadoopVersion    PigVersion    UserId    StartedAt             FinishedAt             Features 
2.6.0            0.15.0        Hadoop    2015-10-0 13:03:03    2015-10-05 13:05:05    UNKNOWN  
Success!  
Job Stats (time in seconds): 
JobId          Maps    Reduces    MaxMapTime    MinMapTime    AvgMapTime    MedianMapTime    
job_14459_06    1        0           n/a           n/a           n/a           n/a
MaxReduceTime    MinReduceTime    AvgReduceTime    MedianReducetime    Alias    Feature   
     0                 0                0                0             student  MAP_ONLY 
OutPut folder
hdfs://localhost:9000/pig_Output/ 
 
Input(s): Successfully read 0 records from: "hdfs://localhost:9000/pig_data/student_data.txt"  
Output(s): Successfully stored 0 records in: "hdfs://localhost:9000/pig_Output"  
Counters:
Total records written : 0
Total bytes written : 0
Spillable Memory Manager spill count : 0 
Total bags proactively spilled: 0
Total records proactively spilled: 0
  
Job DAG: job_1443519499159_0006
  
2015-10-05 13:06:06,192 [main] INFO  org.apache.pig.backend.hadoop.executionengine
.mapReduceLayer.MapReduceLau ncher - Success!

Verifikasi

Anda dapat memverifikasi data yang disimpan seperti yang ditunjukkan di bawah ini.

Langkah 1

Pertama-tama, buat daftar file dalam direktori bernama pig_output menggunakan ls perintah seperti yang ditunjukkan di bawah ini.

hdfs dfs -ls 'hdfs://localhost:9000/pig_Output/'
Found 2 items
rw-r--r-   1 Hadoop supergroup          0 2015-10-05 13:03 hdfs://localhost:9000/pig_Output/_SUCCESS
rw-r--r-   1 Hadoop supergroup        224 2015-10-05 13:03 hdfs://localhost:9000/pig_Output/part-m-00000

Anda dapat mengamati bahwa dua file dibuat setelah menjalankan store pernyataan.

Langkah 2

Menggunakan cat perintah, daftar isi dari file bernama part-m-00000 seperti gambar dibawah.

$ hdfs dfs -cat 'hdfs://localhost:9000/pig_Output/part-m-00000' 
1,Rajiv,Reddy,9848022337,Hyderabad
2,siddarth,Battacharya,9848022338,Kolkata
3,Rajesh,Khanna,9848022339,Delhi
4,Preethi,Agarwal,9848022330,Pune
5,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
6,Archana,Mishra,9848022335,Chennai

Itu loadpernyataan hanya akan memuat data ke dalam relasi yang ditentukan di Apache Pig. Untuk memverifikasi eksekusi fileLoad pernyataan, Anda harus menggunakan Diagnostic Operators. Pig Latin menyediakan empat jenis operator diagnostik -

  • Operator sampah
  • Jelaskan operator
  • Operator penjelasan
  • Operator ilustrasi

Dalam bab ini, kita akan membahas operator Dump Pig Latin.

Operator Sampah

Itu Dumpoperator digunakan untuk menjalankan pernyataan Pig Latin dan menampilkan hasilnya di layar. Ini umumnya digunakan untuk tujuan debugging.

Sintaksis

Diberikan di bawah ini adalah sintaks dari Dump operator.

grunt> Dump Relation_Name

Contoh

Asumsikan kita memiliki file student_data.txt dalam HDFS dengan konten berikut.

001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai.

Dan kami telah membacanya menjadi suatu relasi student menggunakan operator LOAD seperti yang ditunjukkan di bawah ini.

grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt' 
   USING PigStorage(',')
   as ( id:int, firstname:chararray, lastname:chararray, phone:chararray, 
   city:chararray );

Sekarang, mari kita mencetak konten relasi menggunakan Dump operator seperti gambar dibawah.

grunt> Dump student

Setelah Anda menjalankan langkah di atas Pig Latinpernyataan, itu akan memulai pekerjaan MapReduce untuk membaca data dari HDFS. Ini akan menghasilkan keluaran sebagai berikut.

2015-10-01 15:05:27,642 [main]
INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 
100% complete
2015-10-01 15:05:27,652 [main]
INFO  org.apache.pig.tools.pigstats.mapreduce.SimplePigStats - Script Statistics:   
HadoopVersion  PigVersion  UserId    StartedAt             FinishedAt       Features             
2.6.0          0.15.0      Hadoop  2015-10-01 15:03:11  2015-10-01 05:27     UNKNOWN
                                                
Success!  
Job Stats (time in seconds):
  
JobId           job_14459_0004
Maps                 1  
Reduces              0  
MaxMapTime          n/a    
MinMapTime          n/a
AvgMapTime          n/a 
MedianMapTime       n/a
MaxReduceTime        0
MinReduceTime        0  
AvgReduceTime        0
MedianReducetime     0
Alias             student 
Feature           MAP_ONLY        
Outputs           hdfs://localhost:9000/tmp/temp580182027/tmp757878456,

Input(s): Successfully read 0 records from: "hdfs://localhost:9000/pig_data/
student_data.txt"
  
Output(s): Successfully stored 0 records in: "hdfs://localhost:9000/tmp/temp580182027/
tmp757878456"  

Counters: Total records written : 0 Total bytes written : 0 Spillable Memory Manager 
spill count : 0Total bags proactively spilled: 0 Total records proactively spilled: 0  

Job DAG: job_1443519499159_0004
  
2015-10-01 15:06:28,403 [main]
INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLau ncher - Success!
2015-10-01 15:06:28,441 [main] INFO  org.apache.pig.data.SchemaTupleBackend - 
Key [pig.schematuple] was not set... will not generate code.
2015-10-01 15:06:28,485 [main]
INFO  org.apache.hadoop.mapreduce.lib.input.FileInputFormat - Total input paths 
to process : 1
2015-10-01 15:06:28,485 [main]
INFO  org.apache.pig.backend.hadoop.executionengine.util.MapRedUtil - Total input paths
to process : 1

(1,Rajiv,Reddy,9848022337,Hyderabad) (2,siddarth,Battacharya,9848022338,Kolkata) (3,Rajesh,Khanna,9848022339,Delhi) (4,Preethi,Agarwal,9848022330,Pune) (5,Trupthi,Mohanthy,9848022336,Bhuwaneshwar) (6,Archana,Mishra,9848022335,Chennai)

Itu describe operator digunakan untuk melihat skema relasi.

Sintaksis

Sintaks dari file describe operator adalah sebagai berikut -

grunt> Describe Relation_name

Contoh

Asumsikan kita memiliki file student_data.txt dalam HDFS dengan konten berikut.

001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai.

Dan kami telah membacanya menjadi suatu relasi student menggunakan operator LOAD seperti yang ditunjukkan di bawah ini.

grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt' USING PigStorage(',')
   as ( id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray );

Sekarang, mari kita gambarkan relasi bernama student dan verifikasi skema seperti yang ditunjukkan di bawah ini.

grunt> describe student;

Keluaran

Setelah Anda menjalankan langkah di atas Pig Latin pernyataan, itu akan menghasilkan output berikut.

grunt> student: { id: int,firstname: chararray,lastname: chararray,phone: chararray,city: chararray }

Itu explain operator digunakan untuk menampilkan rencana eksekusi logis, fisik, dan MapReduce dari suatu relasi.

Sintaksis

Diberikan di bawah ini adalah sintaks dari explain operator.

grunt> explain Relation_name;

Contoh

Asumsikan kita memiliki file student_data.txt dalam HDFS dengan konten berikut.

001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai.

Dan kami telah membacanya menjadi suatu relasi student menggunakan operator LOAD seperti yang ditunjukkan di bawah ini.

grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt' USING PigStorage(',')
   as ( id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray );

Sekarang, mari kita jelaskan relasi bernama student menggunakan explain operator seperti yang ditunjukkan di bawah ini.

grunt> explain student;

Keluaran

Ini akan menghasilkan keluaran sebagai berikut.

$ explain student;

2015-10-05 11:32:43,660 [main]
2015-10-05 11:32:43,660 [main] INFO  org.apache.pig.newplan.logical.optimizer
.LogicalPlanOptimizer -
{RULES_ENABLED=[AddForEach, ColumnMapKeyPrune, ConstantCalculator,
GroupByConstParallelSetter, LimitOptimizer, LoadTypeCastInserter, MergeFilter, 
MergeForEach, PartitionFilterOptimizer, PredicatePushdownOptimizer,
PushDownForEachFlatten, PushUpFilter, SplitFilter, StreamTypeCastInserter]}  
#-----------------------------------------------
# New Logical Plan: 
#-----------------------------------------------
student: (Name: LOStore Schema:
id#31:int,firstname#32:chararray,lastname#33:chararray,phone#34:chararray,city#
35:chararray)
| 
|---student: (Name: LOForEach Schema:
id#31:int,firstname#32:chararray,lastname#33:chararray,phone#34:chararray,city#
35:chararray)
    |   |
    |   (Name: LOGenerate[false,false,false,false,false] Schema:
id#31:int,firstname#32:chararray,lastname#33:chararray,phone#34:chararray,city#
35:chararray)ColumnPrune:InputUids=[34, 35, 32, 33,
31]ColumnPrune:OutputUids=[34, 35, 32, 33, 31]
    |   |   | 
    |   |   (Name: Cast Type: int Uid: 31) 
    |   |   |     |   |   |---id:(Name: Project Type: bytearray Uid: 31 Input: 0 Column: (*))
    |   |   |     
    |   |   (Name: Cast Type: chararray Uid: 32)
    |   |   | 
    |   |   |---firstname:(Name: Project Type: bytearray Uid: 32 Input: 1
Column: (*))
    |   |   |
    |   |   (Name: Cast Type: chararray Uid: 33)
    |   |   |
    |   |   |---lastname:(Name: Project Type: bytearray Uid: 33 Input: 2
	 Column: (*))
    |   |   | 
    |   |   (Name: Cast Type: chararray Uid: 34)
    |   |   |  
    |   |   |---phone:(Name: Project Type: bytearray Uid: 34 Input: 3 Column:
(*))
    |   |   | 
    |   |   (Name: Cast Type: chararray Uid: 35)
    |   |   |  
    |   |   |---city:(Name: Project Type: bytearray Uid: 35 Input: 4 Column:
(*))
    |   | 
    |   |---(Name: LOInnerLoad[0] Schema: id#31:bytearray)
    |   |  
    |   |---(Name: LOInnerLoad[1] Schema: firstname#32:bytearray)
    |   |
    |   |---(Name: LOInnerLoad[2] Schema: lastname#33:bytearray)
    |   |
    |   |---(Name: LOInnerLoad[3] Schema: phone#34:bytearray)
    |   | 
    |   |---(Name: LOInnerLoad[4] Schema: city#35:bytearray)
    |
    |---student: (Name: LOLoad Schema: 
id#31:bytearray,firstname#32:bytearray,lastname#33:bytearray,phone#34:bytearray
,city#35:bytearray)RequiredFields:null 
#-----------------------------------------------
# Physical Plan: #-----------------------------------------------
student: Store(fakefile:org.apache.pig.builtin.PigStorage) - scope-36
| 
|---student: New For Each(false,false,false,false,false)[bag] - scope-35
    |   |
    |   Cast[int] - scope-21
    |   |
    |   |---Project[bytearray][0] - scope-20
    |   |  
    |   Cast[chararray] - scope-24
    |   |
    |   |---Project[bytearray][1] - scope-23
    |   | 
    |   Cast[chararray] - scope-27
    |   |  
    |   |---Project[bytearray][2] - scope-26 
    |   |  
    |   Cast[chararray] - scope-30 
    |   |  
    |   |---Project[bytearray][3] - scope-29
    |   |
    |   Cast[chararray] - scope-33
    |   | 
    |   |---Project[bytearray][4] - scope-32
    | 
    |---student: Load(hdfs://localhost:9000/pig_data/student_data.txt:PigStorage(',')) - scope19
2015-10-05 11:32:43,682 [main]
INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MRCompiler - 
File concatenation threshold: 100 optimistic? false
2015-10-05 11:32:43,684 [main]
INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MultiQueryOp timizer - 
MR plan size before optimization: 1 2015-10-05 11:32:43,685 [main]
INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.
MultiQueryOp timizer - MR plan size after optimization: 1 
#--------------------------------------------------
# Map Reduce Plan                                   
#--------------------------------------------------
MapReduce node scope-37
Map Plan
student: Store(fakefile:org.apache.pig.builtin.PigStorage) - scope-36
|
|---student: New For Each(false,false,false,false,false)[bag] - scope-35
    |   |
    |   Cast[int] - scope-21 
    |   |
    |   |---Project[bytearray][0] - scope-20
    |   |
    |   Cast[chararray] - scope-24
    |   |
    |   |---Project[bytearray][1] - scope-23
    |   |
    |   Cast[chararray] - scope-27
    |   | 
    |   |---Project[bytearray][2] - scope-26 
    |   | 
    |   Cast[chararray] - scope-30 
    |   |  
    |   |---Project[bytearray][3] - scope-29 
    |   | 
    |   Cast[chararray] - scope-33
    |   | 
    |   |---Project[bytearray][4] - scope-32 
    |  
    |---student:
Load(hdfs://localhost:9000/pig_data/student_data.txt:PigStorage(',')) - scope
19-------- Global sort: false
 ----------------

Itu illustrate operator memberi Anda eksekusi langkah demi langkah dari urutan pernyataan.

Sintaksis

Diberikan di bawah ini adalah sintaks dari illustrate operator.

grunt> illustrate Relation_name;

Contoh

Asumsikan kita memiliki file student_data.txt dalam HDFS dengan konten berikut.

001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata 
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune 
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai.

Dan kami telah membacanya menjadi suatu relasi student menggunakan operator LOAD seperti yang ditunjukkan di bawah ini.

grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt' USING PigStorage(',')
   as ( id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray );

Sekarang, mari kita gambarkan relasi bernama student seperti yang ditunjukkan di bawah ini.

grunt> illustrate student;

Keluaran

Saat menjalankan pernyataan di atas, Anda akan mendapatkan output berikut.

grunt> illustrate student;

INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigMapOnly$M ap - Aliases
being processed per job phase (AliasName[line,offset]): M: student[1,10] C:  R:
---------------------------------------------------------------------------------------------
|student | id:int | firstname:chararray | lastname:chararray | phone:chararray | city:chararray |
--------------------------------------------------------------------------------------------- 
|        | 002    | siddarth            | Battacharya        | 9848022338      | Kolkata        |
---------------------------------------------------------------------------------------------

Itu GROUPoperator digunakan untuk mengelompokkan data dalam satu atau lebih relasi. Ini mengumpulkan data yang memiliki kunci yang sama.

Sintaksis

Diberikan di bawah ini adalah sintaks dari group operator.

grunt> Group_data = GROUP Relation_name BY age;

Contoh

Asumsikan bahwa kita memiliki file bernama student_details.txt di direktori HDFS /pig_data/ seperti gambar dibawah.

student_details.txt

001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi
004,Preethi,Agarwal,21,9848022330,Pune
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar
006,Archana,Mishra,23,9848022335,Chennai
007,Komal,Nayak,24,9848022334,trivendram
008,Bharathi,Nambiayar,24,9848022333,Chennai

Dan kami telah memuat file ini ke Apache Pig dengan nama relasi student_details seperti gambar dibawah.

grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
   as (id:int, firstname:chararray, lastname:chararray, age:int, phone:chararray, city:chararray);

Sekarang, mari kita kelompokkan catatan / tupel dalam relasi berdasarkan usia seperti yang ditunjukkan di bawah ini.

grunt> group_data = GROUP student_details by age;

Verifikasi

Verifikasi relasinya group_data menggunakan DUMP operator seperti yang ditunjukkan di bawah ini.

grunt> Dump group_data;

Keluaran

Kemudian Anda akan mendapatkan output yang menampilkan konten dari relasi bernama group_dataseperti gambar dibawah. Di sini Anda dapat mengamati bahwa skema yang dihasilkan memiliki dua kolom -

  • Satu adalah age, yang dengannya kami telah mengelompokkan relasi.

  • Yang lainnya adalah a bag, yang berisikan kelompok tupel, catatan siswa dengan umur masing-masing.

(21,{(4,Preethi,Agarwal,21,9848022330,Pune),(1,Rajiv,Reddy,21,9848022337,Hydera bad)})
(22,{(3,Rajesh,Khanna,22,9848022339,Delhi),(2,siddarth,Battacharya,22,984802233 8,Kolkata)})
(23,{(6,Archana,Mishra,23,9848022335,Chennai),(5,Trupthi,Mohanthy,23,9848022336 ,Bhuwaneshwar)})
(24,{(8,Bharathi,Nambiayar,24,9848022333,Chennai),(7,Komal,Nayak,24,9848022334, trivendram)})

Anda dapat melihat skema tabel setelah mengelompokkan data menggunakan describe perintah seperti yang ditunjukkan di bawah ini.

grunt> Describe group_data;
  
group_data: {group: int,student_details: {(id: int,firstname: chararray,
               lastname: chararray,age: int,phone: chararray,city: chararray)}}

Dengan cara yang sama, Anda bisa mendapatkan ilustrasi contoh skema menggunakan illustrate perintah seperti yang ditunjukkan di bawah ini.

$ Illustrate group_data;

Ini akan menghasilkan keluaran sebagai berikut -

------------------------------------------------------------------------------------------------- 
|group_data|  group:int | student_details:bag{:tuple(id:int,firstname:chararray,lastname:chararray,age:int,phone:chararray,city:chararray)}|
------------------------------------------------------------------------------------------------- 
|          |     21     | { 4, Preethi, Agarwal, 21, 9848022330, Pune), (1, Rajiv, Reddy, 21, 9848022337, Hyderabad)}| 
|          |     2      | {(2,siddarth,Battacharya,22,9848022338,Kolkata),(003,Rajesh,Khanna,22,9848022339,Delhi)}| 
-------------------------------------------------------------------------------------------------

Pengelompokan berdasarkan Beberapa Kolom

Mari kita kelompokkan relasinya berdasarkan usia dan kota seperti yang ditunjukkan di bawah ini.

grunt> group_multiple = GROUP student_details by (age, city);

Anda dapat memverifikasi konten relasi bernama group_multiple menggunakan operator Dump seperti yang ditunjukkan di bawah ini.

grunt> Dump group_multiple; 
  
((21,Pune),{(4,Preethi,Agarwal,21,9848022330,Pune)})
((21,Hyderabad),{(1,Rajiv,Reddy,21,9848022337,Hyderabad)})
((22,Delhi),{(3,Rajesh,Khanna,22,9848022339,Delhi)})
((22,Kolkata),{(2,siddarth,Battacharya,22,9848022338,Kolkata)})
((23,Chennai),{(6,Archana,Mishra,23,9848022335,Chennai)})
((23,Bhuwaneshwar),{(5,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar)})
((24,Chennai),{(8,Bharathi,Nambiayar,24,9848022333,Chennai)})
(24,trivendram),{(7,Komal,Nayak,24,9848022334,trivendram)})

Kelompokkan Semua

Anda dapat mengelompokkan relasi berdasarkan semua kolom seperti yang ditunjukkan di bawah ini.

grunt> group_all = GROUP student_details All;

Sekarang, verifikasi konten relasinya group_all seperti gambar dibawah.

grunt> Dump group_all;  
  
(all,{(8,Bharathi,Nambiayar,24,9848022333,Chennai),(7,Komal,Nayak,24,9848022334 ,trivendram), 
(6,Archana,Mishra,23,9848022335,Chennai),(5,Trupthi,Mohanthy,23,9848022336,Bhuw aneshwar), 
(4,Preethi,Agarwal,21,9848022330,Pune),(3,Rajesh,Khanna,22,9848022339,Delhi), 
(2,siddarth,Battacharya,22,9848022338,Kolkata),(1,Rajiv,Reddy,21,9848022337,Hyd erabad)})

Itu COGROUPcara kerja operator kurang lebih sama dengan operator GROUP . Satu-satunya perbedaan antara kedua operator tersebut adalah bahwagroup operator biasanya digunakan dengan satu relasi, sedangkan cogroup operator digunakan dalam pernyataan yang melibatkan dua atau lebih relasi.

Pengelompokan Dua Relasi menggunakan Cogroup

Asumsikan kita memiliki dua file yaitu student_details.txt dan employee_details.txt di direktori HDFS /pig_data/ seperti gambar dibawah.

student_details.txt

001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi
004,Preethi,Agarwal,21,9848022330,Pune
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar
006,Archana,Mishra,23,9848022335,Chennai
007,Komal,Nayak,24,9848022334,trivendram
008,Bharathi,Nambiayar,24,9848022333,Chennai

employee_details.txt

001,Robin,22,newyork 
002,BOB,23,Kolkata 
003,Maya,23,Tokyo 
004,Sara,25,London 
005,David,23,Bhuwaneshwar 
006,Maggy,22,Chennai

Dan kami telah memuat file-file ini ke Pig dengan nama relasi student_details dan employee_details masing-masing, seperti yang ditunjukkan di bawah ini.

grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
   as (id:int, firstname:chararray, lastname:chararray, age:int, phone:chararray, city:chararray); 
  
grunt> employee_details = LOAD 'hdfs://localhost:9000/pig_data/employee_details.txt' USING PigStorage(',')
   as (id:int, name:chararray, age:int, city:chararray);

Sekarang, mari kita kelompokkan record / tuple dari relasi tersebut student_details dan employee_details dengan usia kunci, seperti yang ditunjukkan di bawah ini.

grunt> cogroup_data = COGROUP student_details by age, employee_details by age;

Verifikasi

Verifikasi relasinya cogroup_data menggunakan DUMP operator seperti yang ditunjukkan di bawah ini.

grunt> Dump cogroup_data;

Keluaran

Ini akan menghasilkan keluaran berikut, menampilkan isi dari relasi bernama cogroup_data seperti gambar dibawah.

(21,{(4,Preethi,Agarwal,21,9848022330,Pune), (1,Rajiv,Reddy,21,9848022337,Hyderabad)}, 
   {    })  
(22,{ (3,Rajesh,Khanna,22,9848022339,Delhi), (2,siddarth,Battacharya,22,9848022338,Kolkata) },  
   { (6,Maggy,22,Chennai),(1,Robin,22,newyork) })  
(23,{(6,Archana,Mishra,23,9848022335,Chennai),(5,Trupthi,Mohanthy,23,9848022336 ,Bhuwaneshwar)}, 
   {(5,David,23,Bhuwaneshwar),(3,Maya,23,Tokyo),(2,BOB,23,Kolkata)}) 
(24,{(8,Bharathi,Nambiayar,24,9848022333,Chennai),(7,Komal,Nayak,24,9848022334, trivendram)}, 
   { })  
(25,{   }, 
   {(4,Sara,25,London)})

Itu cogroup operator mengelompokkan tupel dari setiap relasi sesuai dengan usia di mana setiap kelompok menggambarkan nilai usia tertentu.

Misalnya, jika kita mempertimbangkan hasil tupel pertama, itu dikelompokkan berdasarkan usia 21. Dan itu berisi dua kantong -

  • tas pertama menampung semua tupel dari relasi pertama (student_details dalam hal ini) memiliki usia 21, dan

  • tas kedua berisi semua tupel dari relasi kedua (employee_details dalam hal ini) memiliki usia 21.

Jika suatu relasi tidak memiliki tupel yang memiliki nilai usia 21, ia mengembalikan kantong kosong.

Itu JOINoperator digunakan untuk menggabungkan record dari dua atau lebih relasi. Saat melakukan operasi gabungan, kami mendeklarasikan satu (atau sekelompok) tupel dari setiap relasi, sebagai kunci. Ketika kunci-kunci ini cocok, dua tupel tertentu cocok, jika tidak, catatan akan dihapus. Gabungan bisa dari jenis berikut -

  • Self-join
  • Inner-join
  • Gabung luar - gabung kiri, gabung kanan, dan gabung penuh

Bab ini menjelaskan dengan contoh bagaimana menggunakan operator gabungan dalam Pig Latin. Asumsikan kita memiliki dua file yaitucustomers.txt dan orders.txt dalam /pig_data/ direktori HDFS seperti yang ditunjukkan di bawah ini.

customers.txt

1,Ramesh,32,Ahmedabad,2000.00
2,Khilan,25,Delhi,1500.00
3,kaushik,23,Kota,2000.00
4,Chaitali,25,Mumbai,6500.00 
5,Hardik,27,Bhopal,8500.00
6,Komal,22,MP,4500.00
7,Muffy,24,Indore,10000.00

orders.txt

102,2009-10-08 00:00:00,3,3000
100,2009-10-08 00:00:00,3,1500
101,2009-11-20 00:00:00,2,1560
103,2008-05-20 00:00:00,4,2060

Dan kami telah memuat dua file ini ke Pig dengan relasi customers dan orders seperti gambar dibawah.

grunt> customers = LOAD 'hdfs://localhost:9000/pig_data/customers.txt' USING PigStorage(',')
   as (id:int, name:chararray, age:int, address:chararray, salary:int);
  
grunt> orders = LOAD 'hdfs://localhost:9000/pig_data/orders.txt' USING PigStorage(',')
   as (oid:int, date:chararray, customer_id:int, amount:int);

Sekarang mari kita melakukan berbagai operasi Gabung pada dua relasi ini.

Self - gabung

Self-join digunakan untuk menggabungkan tabel dengan dirinya sendiri seolah-olah tabel adalah dua relasi, untuk sementara mengganti nama setidaknya satu relasi.

Secara umum, di Apache Pig, untuk melakukan self-join, kami akan memuat data yang sama beberapa kali, dengan alias (nama) yang berbeda. Oleh karena itu mari kita muat isi file tersebutcustomers.txt sebagai dua tabel seperti yang ditunjukkan di bawah ini.

grunt> customers1 = LOAD 'hdfs://localhost:9000/pig_data/customers.txt' USING PigStorage(',')
   as (id:int, name:chararray, age:int, address:chararray, salary:int);
  
grunt> customers2 = LOAD 'hdfs://localhost:9000/pig_data/customers.txt' USING PigStorage(',')
   as (id:int, name:chararray, age:int, address:chararray, salary:int);

Sintaksis

Diberikan di bawah ini adalah sintaks melakukan self-join operasi menggunakan JOIN operator.

grunt> Relation3_name = JOIN Relation1_name BY key, Relation2_name BY key ;

Contoh

Mari kita tampil self-join operasi pada relasi customers, dengan menggabungkan dua relasi customers1 dan customers2 seperti gambar dibawah.

grunt> customers3 = JOIN customers1 BY id, customers2 BY id;

Verifikasi

Verifikasi relasinya customers3 menggunakan DUMP operator seperti yang ditunjukkan di bawah ini.

grunt> Dump customers3;

Keluaran

Ini akan menghasilkan keluaran berikut, menampilkan isi relasi customers.

(1,Ramesh,32,Ahmedabad,2000,1,Ramesh,32,Ahmedabad,2000)
(2,Khilan,25,Delhi,1500,2,Khilan,25,Delhi,1500)
(3,kaushik,23,Kota,2000,3,kaushik,23,Kota,2000)
(4,Chaitali,25,Mumbai,6500,4,Chaitali,25,Mumbai,6500)
(5,Hardik,27,Bhopal,8500,5,Hardik,27,Bhopal,8500)
(6,Komal,22,MP,4500,6,Komal,22,MP,4500)
(7,Muffy,24,Indore,10000,7,Muffy,24,Indore,10000)

Gabung Batin

Inner Joindigunakan cukup sering; itu juga disebut sebagaiequijoin. Gabungan dalam mengembalikan baris ketika ada kecocokan di kedua tabel.

Ini membuat relasi baru dengan menggabungkan nilai kolom dari dua relasi (katakanlah A dan B) berdasarkan predikat gabungan. Kueri membandingkan setiap baris A dengan setiap baris B untuk menemukan semua pasangan baris yang memenuhi predikat gabungan. Jika predikat gabungan terpenuhi, nilai kolom untuk setiap pasangan baris A dan B yang cocok digabungkan menjadi baris hasil.

Sintaksis

Berikut adalah sintaks performanya inner join operasi menggunakan JOIN operator.

grunt> result = JOIN relation1 BY columnname, relation2 BY columnname;

Contoh

Mari kita tampil inner join operasi pada dua relasi customers dan orders seperti gambar dibawah.

grunt> coustomer_orders = JOIN customers BY id, orders BY customer_id;

Verifikasi

Verifikasi relasinya coustomer_orders menggunakan DUMP operator seperti yang ditunjukkan di bawah ini.

grunt> Dump coustomer_orders;

Keluaran

Anda akan mendapatkan output berikut yang akan diberi nama isi relasi coustomer_orders.

(2,Khilan,25,Delhi,1500,101,2009-11-20 00:00:00,2,1560)
(3,kaushik,23,Kota,2000,100,2009-10-08 00:00:00,3,1500)
(3,kaushik,23,Kota,2000,102,2009-10-08 00:00:00,3,3000)
(4,Chaitali,25,Mumbai,6500,103,2008-05-20 00:00:00,4,2060)

Note -

Gabung Luar : Tidak seperti gabungan dalam,outer joinmengembalikan semua baris dari setidaknya satu relasi. Operasi sambungan luar dilakukan dengan tiga cara -

  • Gabungan luar kiri
  • Gabungan kanan luar
  • Gabungan luar penuh

Gabung Luar Kiri

Itu left outer Join operasi mengembalikan semua baris dari tabel kiri, bahkan jika tidak ada kecocokan di relasi kanan.

Sintaksis

Diberikan di bawah ini adalah sintaks melakukan left outer join operasi menggunakan JOIN operator.

grunt> Relation3_name = JOIN Relation1_name BY id LEFT OUTER, Relation2_name BY customer_id;

Contoh

Mari kita lakukan operasi gabungan luar kiri pada dua relasi pelanggan dan pesanan seperti yang ditunjukkan di bawah ini.

grunt> outer_left = JOIN customers BY id LEFT OUTER, orders BY customer_id;

Verifikasi

Verifikasi relasinya outer_left menggunakan DUMP operator seperti yang ditunjukkan di bawah ini.

grunt> Dump outer_left;

Keluaran

Ini akan menghasilkan keluaran berikut, menampilkan isi relasi outer_left.

(1,Ramesh,32,Ahmedabad,2000,,,,)
(2,Khilan,25,Delhi,1500,101,2009-11-20 00:00:00,2,1560)
(3,kaushik,23,Kota,2000,100,2009-10-08 00:00:00,3,1500)
(3,kaushik,23,Kota,2000,102,2009-10-08 00:00:00,3,3000)
(4,Chaitali,25,Mumbai,6500,103,2008-05-20 00:00:00,4,2060)
(5,Hardik,27,Bhopal,8500,,,,)
(6,Komal,22,MP,4500,,,,)
(7,Muffy,24,Indore,10000,,,,)

Gabung Luar Kanan

Itu right outer join operasi mengembalikan semua baris dari tabel kanan, bahkan jika tidak ada kecocokan di tabel kiri.

Sintaksis

Diberikan di bawah ini adalah sintaks melakukan right outer join operasi menggunakan JOIN operator.

grunt> outer_right = JOIN customers BY id RIGHT, orders BY customer_id;

Contoh

Mari kita tampil right outer join operasi pada dua relasi customers dan orders seperti gambar dibawah.

grunt> outer_right = JOIN customers BY id RIGHT, orders BY customer_id;

Verifikasi

Verifikasi relasinya outer_right menggunakan DUMP operator seperti yang ditunjukkan di bawah ini.

grunt> Dump outer_right

Keluaran

Ini akan menghasilkan keluaran berikut, menampilkan isi relasi outer_right.

(2,Khilan,25,Delhi,1500,101,2009-11-20 00:00:00,2,1560)
(3,kaushik,23,Kota,2000,100,2009-10-08 00:00:00,3,1500)
(3,kaushik,23,Kota,2000,102,2009-10-08 00:00:00,3,3000)
(4,Chaitali,25,Mumbai,6500,103,2008-05-20 00:00:00,4,2060)

Gabung Luar Penuh

Itu full outer join operasi mengembalikan baris ketika ada kecocokan di salah satu relasi.

Sintaksis

Diberikan di bawah ini adalah sintaks melakukan full outer join menggunakan JOIN operator.

grunt> outer_full = JOIN customers BY id FULL OUTER, orders BY customer_id;

Contoh

Mari kita tampil full outer join operasi pada dua relasi customers dan orders seperti gambar dibawah.

grunt> outer_full = JOIN customers BY id FULL OUTER, orders BY customer_id;

Verifikasi

Verifikasi relasinya outer_full menggunakan DUMP operator seperti yang ditunjukkan di bawah ini.

grun> Dump outer_full;

Keluaran

Ini akan menghasilkan keluaran berikut, menampilkan isi relasi outer_full.

(1,Ramesh,32,Ahmedabad,2000,,,,)
(2,Khilan,25,Delhi,1500,101,2009-11-20 00:00:00,2,1560)
(3,kaushik,23,Kota,2000,100,2009-10-08 00:00:00,3,1500)
(3,kaushik,23,Kota,2000,102,2009-10-08 00:00:00,3,3000)
(4,Chaitali,25,Mumbai,6500,103,2008-05-20 00:00:00,4,2060)
(5,Hardik,27,Bhopal,8500,,,,)
(6,Komal,22,MP,4500,,,,)
(7,Muffy,24,Indore,10000,,,,)

Menggunakan Banyak Tombol

Kita dapat melakukan operasi JOIN menggunakan beberapa kunci.

Sintaksis

Berikut adalah bagaimana Anda dapat melakukan operasi GABUNG pada dua tabel menggunakan beberapa tombol.

grunt> Relation3_name = JOIN Relation2_name BY (key1, key2), Relation3_name BY (key1, key2);

Asumsikan kita memiliki dua file yaitu employee.txt dan employee_contact.txt dalam /pig_data/ direktori HDFS seperti yang ditunjukkan di bawah ini.

employee.txt

001,Rajiv,Reddy,21,programmer,003
002,siddarth,Battacharya,22,programmer,003
003,Rajesh,Khanna,22,programmer,003
004,Preethi,Agarwal,21,programmer,003
005,Trupthi,Mohanthy,23,programmer,003
006,Archana,Mishra,23,programmer,003
007,Komal,Nayak,24,teamlead,002
008,Bharathi,Nambiayar,24,manager,001

employee_contact.txt

001,9848022337,[email protected],Hyderabad,003
002,9848022338,[email protected],Kolkata,003
003,9848022339,[email protected],Delhi,003
004,9848022330,[email protected],Pune,003
005,9848022336,[email protected],Bhuwaneshwar,003
006,9848022335,[email protected],Chennai,003
007,9848022334,[email protected],trivendram,002
008,9848022333,[email protected],Chennai,001

Dan kami telah memuat kedua file ini ke Pig dengan hubungan employee dan employee_contact seperti gambar dibawah.

grunt> employee = LOAD 'hdfs://localhost:9000/pig_data/employee.txt' USING PigStorage(',')
   as (id:int, firstname:chararray, lastname:chararray, age:int, designation:chararray, jobid:int);
  
grunt> employee_contact = LOAD 'hdfs://localhost:9000/pig_data/employee_contact.txt' USING PigStorage(',') 
   as (id:int, phone:chararray, email:chararray, city:chararray, jobid:int);

Sekarang, mari kita gabungkan konten dari dua relasi ini menggunakan JOIN operator seperti yang ditunjukkan di bawah ini.

grunt> emp = JOIN employee BY (id,jobid), employee_contact BY (id,jobid);

Verifikasi

Verifikasi relasinya emp menggunakan DUMP operator seperti yang ditunjukkan di bawah ini.

grunt> Dump emp;

Keluaran

Ini akan menghasilkan keluaran berikut, menampilkan isi dari relasi bernama emp seperti gambar dibawah.

(1,Rajiv,Reddy,21,programmer,113,1,9848022337,[email protected],Hyderabad,113)
(2,siddarth,Battacharya,22,programmer,113,2,9848022338,[email protected],Kolka ta,113)  
(3,Rajesh,Khanna,22,programmer,113,3,9848022339,[email protected],Delhi,113)  
(4,Preethi,Agarwal,21,programmer,113,4,9848022330,[email protected],Pune,113)  
(5,Trupthi,Mohanthy,23,programmer,113,5,9848022336,[email protected],Bhuwaneshw ar,113)  
(6,Archana,Mishra,23,programmer,113,6,9848022335,[email protected],Chennai,113)  
(7,Komal,Nayak,24,teamlead,112,7,9848022334,[email protected],trivendram,112)  
(8,Bharathi,Nambiayar,24,manager,111,8,9848022333,[email protected],Chennai,111)

Itu CROSSoperator menghitung produk silang dari dua atau lebih relasi. Bab ini menjelaskan dengan contoh bagaimana menggunakan operator silang dalam Pig Latin.

Sintaksis

Diberikan di bawah ini adalah sintaks dari CROSS operator.

grunt> Relation3_name = CROSS Relation1_name, Relation2_name;

Contoh

Asumsikan kita memiliki dua file yaitu customers.txt dan orders.txt dalam /pig_data/ direktori HDFS seperti yang ditunjukkan di bawah ini.

customers.txt

1,Ramesh,32,Ahmedabad,2000.00
2,Khilan,25,Delhi,1500.00
3,kaushik,23,Kota,2000.00
4,Chaitali,25,Mumbai,6500.00
5,Hardik,27,Bhopal,8500.00
6,Komal,22,MP,4500.00
7,Muffy,24,Indore,10000.00

orders.txt

102,2009-10-08 00:00:00,3,3000
100,2009-10-08 00:00:00,3,1500
101,2009-11-20 00:00:00,2,1560
103,2008-05-20 00:00:00,4,2060

Dan kami telah memuat dua file ini ke Pig dengan relasi customers dan orders seperti gambar dibawah.

grunt> customers = LOAD 'hdfs://localhost:9000/pig_data/customers.txt' USING PigStorage(',')
   as (id:int, name:chararray, age:int, address:chararray, salary:int);
  
grunt> orders = LOAD 'hdfs://localhost:9000/pig_data/orders.txt' USING PigStorage(',')
   as (oid:int, date:chararray, customer_id:int, amount:int);

Sekarang, mari kita dapatkan hasil perkalian silang dari kedua relasi ini menggunakan cross operator pada dua relasi ini seperti yang ditunjukkan di bawah ini.

grunt> cross_data = CROSS customers, orders;

Verifikasi

Verifikasi relasinya cross_data menggunakan DUMP operator seperti yang ditunjukkan di bawah ini.

grunt> Dump cross_data;

Keluaran

Ini akan menghasilkan keluaran berikut, menampilkan isi relasi cross_data.

(7,Muffy,24,Indore,10000,103,2008-05-20 00:00:00,4,2060) 
(7,Muffy,24,Indore,10000,101,2009-11-20 00:00:00,2,1560) 
(7,Muffy,24,Indore,10000,100,2009-10-08 00:00:00,3,1500) 
(7,Muffy,24,Indore,10000,102,2009-10-08 00:00:00,3,3000) 
(6,Komal,22,MP,4500,103,2008-05-20 00:00:00,4,2060) 
(6,Komal,22,MP,4500,101,2009-11-20 00:00:00,2,1560) 
(6,Komal,22,MP,4500,100,2009-10-08 00:00:00,3,1500) 
(6,Komal,22,MP,4500,102,2009-10-08 00:00:00,3,3000) 
(5,Hardik,27,Bhopal,8500,103,2008-05-20 00:00:00,4,2060) 
(5,Hardik,27,Bhopal,8500,101,2009-11-20 00:00:00,2,1560) 
(5,Hardik,27,Bhopal,8500,100,2009-10-08 00:00:00,3,1500) 
(5,Hardik,27,Bhopal,8500,102,2009-10-08 00:00:00,3,3000) 
(4,Chaitali,25,Mumbai,6500,103,2008-05-20 00:00:00,4,2060) 
(4,Chaitali,25,Mumbai,6500,101,2009-20 00:00:00,4,2060) 
(2,Khilan,25,Delhi,1500,101,2009-11-20 00:00:00,2,1560) 
(2,Khilan,25,Delhi,1500,100,2009-10-08 00:00:00,3,1500) 
(2,Khilan,25,Delhi,1500,102,2009-10-08 00:00:00,3,3000) 
(1,Ramesh,32,Ahmedabad,2000,103,2008-05-20 00:00:00,4,2060) 
(1,Ramesh,32,Ahmedabad,2000,101,2009-11-20 00:00:00,2,1560) 
(1,Ramesh,32,Ahmedabad,2000,100,2009-10-08 00:00:00,3,1500) 
(1,Ramesh,32,Ahmedabad,2000,102,2009-10-08 00:00:00,3,3000)-11-20 00:00:00,2,1560) 
(4,Chaitali,25,Mumbai,6500,100,2009-10-08 00:00:00,3,1500) 
(4,Chaitali,25,Mumbai,6500,102,2009-10-08 00:00:00,3,3000) 
(3,kaushik,23,Kota,2000,103,2008-05-20 00:00:00,4,2060) 
(3,kaushik,23,Kota,2000,101,2009-11-20 00:00:00,2,1560) 
(3,kaushik,23,Kota,2000,100,2009-10-08 00:00:00,3,1500) 
(3,kaushik,23,Kota,2000,102,2009-10-08 00:00:00,3,3000) 
(2,Khilan,25,Delhi,1500,103,2008-05-20 00:00:00,4,2060) 
(2,Khilan,25,Delhi,1500,101,2009-11-20 00:00:00,2,1560) 
(2,Khilan,25,Delhi,1500,100,2009-10-08 00:00:00,3,1500)
(2,Khilan,25,Delhi,1500,102,2009-10-08 00:00:00,3,3000) 
(1,Ramesh,32,Ahmedabad,2000,103,2008-05-20 00:00:00,4,2060) 
(1,Ramesh,32,Ahmedabad,2000,101,2009-11-20 00:00:00,2,1560) 
(1,Ramesh,32,Ahmedabad,2000,100,2009-10-08 00:00:00,3,1500) 
(1,Ramesh,32,Ahmedabad,2000,102,2009-10-08 00:00:00,3,3000)

Itu UNIONOperator Pig Latin digunakan untuk menggabungkan konten dari dua relasi. Untuk melakukan operasi UNION pada dua relasi, kolom dan domainnya harus identik.

Sintaksis

Diberikan di bawah ini adalah sintaks dari UNION operator.

grunt> Relation_name3 = UNION Relation_name1, Relation_name2;

Contoh

Asumsikan kita memiliki dua file yaitu student_data1.txt dan student_data2.txt dalam /pig_data/ direktori HDFS seperti yang ditunjukkan di bawah ini.

Student_data1.txt

001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai.

Student_data2.txt

7,Komal,Nayak,9848022334,trivendram.
8,Bharathi,Nambiayar,9848022333,Chennai.

Dan kami telah memuat dua file ini ke Pig dengan relasi student1 dan student2 seperti gambar dibawah.

grunt> student1 = LOAD 'hdfs://localhost:9000/pig_data/student_data1.txt' USING PigStorage(',') 
   as (id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray); 
 
grunt> student2 = LOAD 'hdfs://localhost:9000/pig_data/student_data2.txt' USING PigStorage(',') 
   as (id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray);

Sekarang mari kita gabungkan konten dari dua relasi ini menggunakan UNION operator seperti yang ditunjukkan di bawah ini.

grunt> student = UNION student1, student2;

Verifikasi

Verifikasi relasinya student menggunakan DUMP operator seperti yang ditunjukkan di bawah ini.

grunt> Dump student;

Keluaran

Ini akan menampilkan output berikut, menampilkan konten relasi student.

(1,Rajiv,Reddy,9848022337,Hyderabad) (2,siddarth,Battacharya,9848022338,Kolkata)
(3,Rajesh,Khanna,9848022339,Delhi)
(4,Preethi,Agarwal,9848022330,Pune) 
(5,Trupthi,Mohanthy,9848022336,Bhuwaneshwar)
(6,Archana,Mishra,9848022335,Chennai) 
(7,Komal,Nayak,9848022334,trivendram) 
(8,Bharathi,Nambiayar,9848022333,Chennai)

Itu SPLIT operator digunakan untuk membagi relasi menjadi dua atau lebih relasi.

Sintaksis

Diberikan di bawah ini adalah sintaks dari SPLIT operator.

grunt> SPLIT Relation1_name INTO Relation2_name IF (condition1), Relation2_name (condition2),

Contoh

Asumsikan bahwa kita memiliki file bernama student_details.txt di direktori HDFS /pig_data/ seperti gambar dibawah.

student_details.txt

001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi 
004,Preethi,Agarwal,21,9848022330,Pune 
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar 
006,Archana,Mishra,23,9848022335,Chennai 
007,Komal,Nayak,24,9848022334,trivendram 
008,Bharathi,Nambiayar,24,9848022333,Chennai

Dan kami telah memuat file ini ke Pig dengan nama relasi student_details seperti gambar dibawah.

student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
   as (id:int, firstname:chararray, lastname:chararray, age:int, phone:chararray, city:chararray);

Sekarang mari kita pisahkan relasinya menjadi dua, satu daftar karyawan yang berusia kurang dari 23, dan yang lainnya daftar karyawan yang berusia antara 22 dan 25.

SPLIT student_details into student_details1 if age<23, student_details2 if (22<age and age>25);

Verifikasi

Verifikasi relasinya student_details1 dan student_details2 menggunakan DUMP operator seperti yang ditunjukkan di bawah ini.

grunt> Dump student_details1;  

grunt> Dump student_details2;

Keluaran

Ini akan menghasilkan keluaran berikut, menampilkan isi dari relasi student_details1 dan student_details2 masing-masing.

grunt> Dump student_details1; 
(1,Rajiv,Reddy,21,9848022337,Hyderabad) 
(2,siddarth,Battacharya,22,9848022338,Kolkata)
(3,Rajesh,Khanna,22,9848022339,Delhi) 
(4,Preethi,Agarwal,21,9848022330,Pune)
  
grunt> Dump student_details2; 
(5,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar) 
(6,Archana,Mishra,23,9848022335,Chennai) 
(7,Komal,Nayak,24,9848022334,trivendram) 
(8,Bharathi,Nambiayar,24,9848022333,Chennai)

Itu FILTER Operator digunakan untuk memilih tupel yang dibutuhkan dari suatu relasi berdasarkan suatu kondisi.

Sintaksis

Diberikan di bawah ini adalah sintaks dari FILTER operator.

grunt> Relation2_name = FILTER Relation1_name BY (condition);

Contoh

Asumsikan bahwa kita memiliki file bernama student_details.txt di direktori HDFS /pig_data/ seperti gambar dibawah.

student_details.txt

001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi 
004,Preethi,Agarwal,21,9848022330,Pune 
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar 
006,Archana,Mishra,23,9848022335,Chennai 
007,Komal,Nayak,24,9848022334,trivendram 
008,Bharathi,Nambiayar,24,9848022333,Chennai

Dan kami telah memuat file ini ke Pig dengan nama relasi student_details seperti gambar dibawah.

grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
   as (id:int, firstname:chararray, lastname:chararray, age:int, phone:chararray, city:chararray);

Sekarang mari kita gunakan operator Filter untuk mendapatkan detail siswa yang termasuk dalam kota Chennai.

filter_data = FILTER student_details BY city == 'Chennai';

Verifikasi

Verifikasi relasinya filter_data menggunakan DUMP operator seperti yang ditunjukkan di bawah ini.

grunt> Dump filter_data;

Keluaran

Ini akan menghasilkan keluaran berikut, menampilkan isi relasi filter_data sebagai berikut.

(6,Archana,Mishra,23,9848022335,Chennai)
(8,Bharathi,Nambiayar,24,9848022333,Chennai)

Itu DISTINCT operator digunakan untuk menghapus tupel redundan (duplikat) dari suatu relasi.

Sintaksis

Diberikan di bawah ini adalah sintaks dari DISTINCT operator.

grunt> Relation_name2 = DISTINCT Relatin_name1;

Contoh

Asumsikan bahwa kita memiliki file bernama student_details.txt di direktori HDFS /pig_data/ seperti gambar dibawah.

student_details.txt

001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata 
002,siddarth,Battacharya,9848022338,Kolkata 
003,Rajesh,Khanna,9848022339,Delhi 
003,Rajesh,Khanna,9848022339,Delhi 
004,Preethi,Agarwal,9848022330,Pune 
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai 
006,Archana,Mishra,9848022335,Chennai

Dan kami telah memuat file ini ke Pig dengan nama relasi student_details seperti gambar dibawah.

grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',') 
   as (id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray);

Sekarang mari kita hapus tupel redundan (duplikat) dari relasi bernama student_details menggunakan DISTINCT operator, dan menyimpannya sebagai relasi lain bernama distinct_data seperti gambar dibawah.

grunt> distinct_data = DISTINCT student_details;

Verifikasi

Verifikasi relasinya distinct_data menggunakan DUMP operator seperti yang ditunjukkan di bawah ini.

grunt> Dump distinct_data;

Keluaran

Ini akan menghasilkan keluaran berikut, menampilkan isi relasi distinct_data sebagai berikut.

(1,Rajiv,Reddy,9848022337,Hyderabad)
(2,siddarth,Battacharya,9848022338,Kolkata) 
(3,Rajesh,Khanna,9848022339,Delhi) 
(4,Preethi,Agarwal,9848022330,Pune) 
(5,Trupthi,Mohanthy,9848022336,Bhuwaneshwar)
(6,Archana,Mishra,9848022335,Chennai)

Itu FOREACH operator digunakan untuk menghasilkan transformasi data yang ditentukan berdasarkan data kolom.

Sintaksis

Diberikan di bawah ini adalah sintaks FOREACH operator.

grunt> Relation_name2 = FOREACH Relatin_name1 GENERATE (required data);

Contoh

Asumsikan bahwa kita memiliki file bernama student_details.txt di direktori HDFS /pig_data/ seperti gambar dibawah.

student_details.txt

001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi 
004,Preethi,Agarwal,21,9848022330,Pune 
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar 
006,Archana,Mishra,23,9848022335,Chennai 
007,Komal,Nayak,24,9848022334,trivendram 
008,Bharathi,Nambiayar,24,9848022333,Chennai

Dan kami telah memuat file ini ke Pig dengan nama relasi student_details seperti gambar dibawah.

grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
   as (id:int, firstname:chararray, lastname:chararray,age:int, phone:chararray, city:chararray);

Sekarang mari kita dapatkan nilai id, usia, dan kota setiap siswa dari relasi student_details dan menyimpannya ke dalam relasi lain bernama foreach_data menggunakan foreach operator seperti yang ditunjukkan di bawah ini.

grunt> foreach_data = FOREACH student_details GENERATE id,age,city;

Verifikasi

Verifikasi relasinya foreach_data menggunakan DUMP operator seperti yang ditunjukkan di bawah ini.

grunt> Dump foreach_data;

Keluaran

Ini akan menghasilkan keluaran berikut, menampilkan isi relasi foreach_data.

(1,21,Hyderabad)
(2,22,Kolkata)
(3,22,Delhi)
(4,21,Pune) 
(5,23,Bhuwaneshwar)
(6,23,Chennai) 
(7,24,trivendram)
(8,24,Chennai)

Itu ORDER BY operator digunakan untuk menampilkan konten relasi dalam urutan yang diurutkan berdasarkan satu atau lebih bidang.

Sintaksis

Diberikan di bawah ini adalah sintaks dari ORDER BY operator.

grunt> Relation_name2 = ORDER Relatin_name1 BY (ASC|DESC);

Contoh

Asumsikan bahwa kita memiliki file bernama student_details.txt di direktori HDFS /pig_data/ seperti gambar dibawah.

student_details.txt

001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi 
004,Preethi,Agarwal,21,9848022330,Pune 
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar 
006,Archana,Mishra,23,9848022335,Chennai 
007,Komal,Nayak,24,9848022334,trivendram 
008,Bharathi,Nambiayar,24,9848022333,Chennai

Dan kami telah memuat file ini ke Pig dengan nama relasi student_details seperti gambar dibawah.

grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
   as (id:int, firstname:chararray, lastname:chararray,age:int, phone:chararray, city:chararray);

Sekarang mari kita mengurutkan relasi dalam urutan menurun berdasarkan usia siswa dan menyimpannya ke dalam relasi lain bernama order_by_data menggunakan ORDER BY operator seperti yang ditunjukkan di bawah ini.

grunt> order_by_data = ORDER student_details BY age DESC;

Verifikasi

Verifikasi relasinya order_by_data menggunakan DUMP operator seperti yang ditunjukkan di bawah ini.

grunt> Dump order_by_data;

Keluaran

Ini akan menghasilkan keluaran berikut, menampilkan isi relasi order_by_data.

(8,Bharathi,Nambiayar,24,9848022333,Chennai)
(7,Komal,Nayak,24,9848022334,trivendram)
(6,Archana,Mishra,23,9848022335,Chennai) 
(5,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar)
(3,Rajesh,Khanna,22,9848022339,Delhi) 
(2,siddarth,Battacharya,22,9848022338,Kolkata)
(4,Preethi,Agarwal,21,9848022330,Pune) 
(1,Rajiv,Reddy,21,9848022337,Hyderabad)

Itu LIMIT operator digunakan untuk mendapatkan sejumlah tupel dari suatu relasi.

Sintaksis

Diberikan di bawah ini adalah sintaks dari LIMIT operator.

grunt> Result = LIMIT Relation_name required number of tuples;

Contoh

Asumsikan bahwa kita memiliki file bernama student_details.txt di direktori HDFS /pig_data/ seperti gambar dibawah.

student_details.txt

001,Rajiv,Reddy,21,9848022337,Hyderabad
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi 
004,Preethi,Agarwal,21,9848022330,Pune 
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar 
006,Archana,Mishra,23,9848022335,Chennai 
007,Komal,Nayak,24,9848022334,trivendram 
008,Bharathi,Nambiayar,24,9848022333,Chennai

Dan kami telah memuat file ini ke Pig dengan nama relasi student_details seperti gambar dibawah.

grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
   as (id:int, firstname:chararray, lastname:chararray,age:int, phone:chararray, city:chararray);

Sekarang, mari kita urutkan relasi dalam urutan menurun berdasarkan usia siswa dan menyimpannya ke dalam relasi lain bernama limit_data menggunakan ORDER BY operator seperti yang ditunjukkan di bawah ini.

grunt> limit_data = LIMIT student_details 4;

Verifikasi

Verifikasi relasinya limit_data menggunakan DUMP operator seperti yang ditunjukkan di bawah ini.

grunt> Dump limit_data;

Keluaran

Ini akan menghasilkan keluaran berikut, menampilkan isi relasi limit_data sebagai berikut.

(1,Rajiv,Reddy,21,9848022337,Hyderabad) 
(2,siddarth,Battacharya,22,9848022338,Kolkata) 
(3,Rajesh,Khanna,22,9848022339,Delhi) 
(4,Preethi,Agarwal,21,9848022330,Pune)

Apache Pig menyediakan berbagai fungsi bawaan yaitu eval, load, store, math, string, bag dan tuple fungsi.

Fungsi Evaluasi

Diberikan di bawah ini adalah daftar eval fungsi yang disediakan oleh Apache Pig.

SN Deskripsi fungsi
1 AVG ()

Untuk menghitung rata-rata nilai numerik dalam tas.

2 BagToString ()

Untuk menggabungkan elemen tas menjadi sebuah string. Saat menggabungkan, kita dapat menempatkan pemisah di antara nilai-nilai ini (opsional).

3 CONCAT ()

Untuk menggabungkan dua atau lebih ekspresi dengan tipe yang sama.

4 MENGHITUNG()

Untuk mendapatkan jumlah elemen dalam tas, sambil menghitung jumlah tupel dalam tas.

5 COUNT_STAR ()

Ini mirip dengan COUNT()fungsi. Ini digunakan untuk mendapatkan jumlah elemen di dalam tas.

6 DIFF ()

Untuk membandingkan dua tas (bidang) dalam tupel.

7 Kosong()

Untuk memeriksa apakah tas atau peta kosong.

8 MAX ()

Untuk menghitung nilai tertinggi untuk kolom (nilai numerik atau karakter) dalam kantong kolom tunggal.

9 MIN ()

Untuk mendapatkan nilai minimum (terendah) (numerik atau chararray) untuk kolom tertentu dalam kantong kolom tunggal.

10 PluckTuple ()

Menggunakan Pig Latin PluckTuple() fungsi, kita dapat mendefinisikan prefiks string dan memfilter kolom dalam relasi yang dimulai dengan prefiks yang diberikan.

11 UKURAN()

Untuk menghitung jumlah elemen berdasarkan tipe data Pig apa pun.

12 MENGURANGI()

Untuk mengurangi dua kantong. Dibutuhkan dua kantong sebagai masukan dan mengembalikan kantong yang berisi tupel kantong pertama yang tidak ada di kantong kedua.

13 JUMLAH()

Untuk mendapatkan total nilai numerik kolom dalam kantong kolom tunggal.

14 TOKENISASI ()

Untuk membagi string (yang berisi sekelompok kata) dalam satu tupel dan mengembalikan tas yang berisi output dari operasi split.

Itu Load dan Storefungsi di Apache Pig digunakan untuk menentukan bagaimana data keluar dan keluar dari Pig. Fungsi-fungsi ini digunakan dengan beban dan operator penyimpanan. Diberikan di bawah ini adalah daftar fungsi muat dan penyimpanan yang tersedia di Pig.

SN Deskripsi fungsi
1 Penyimpanan Babi ()

Untuk memuat dan menyimpan file terstruktur.

2 TextLoader ()

Untuk memuat data tidak terstruktur ke Pig.

3 BinStorage ()

Untuk memuat dan menyimpan data ke Pig menggunakan format yang dapat dibaca mesin.

4 Menangani Kompresi

Dalam Pig Latin, kita dapat memuat dan menyimpan data terkompresi.

Diberikan di bawah ini adalah daftar fungsi Tas dan Tuple.

SN Deskripsi fungsi
1 TOBAG ()

Untuk mengubah dua atau lebih ekspresi menjadi tas.

2 PUNCAK()

Untuk mencapai puncak N tupel dari suatu relasi.

3 TOTUPLE ()

Untuk mengubah satu atau lebih ekspresi menjadi tupel.

4 UNTUK MEMETAKAN()

Untuk mengonversi pasangan nilai kunci menjadi Peta.

Kami memiliki fungsi String berikut di Apache Pig.

SN Fungsi & Deskripsi
1 ENDSWITH (string, testAgainst)

Untuk memverifikasi apakah string yang diberikan diakhiri dengan substring tertentu.

2 STARTSWITH (string, substring)

Menerima dua parameter string dan memverifikasi apakah string pertama dimulai dengan yang kedua.

3 SUBSTRING (string, startIndex, stopIndex)

Mengembalikan substring dari string tertentu.

4 EqualsIgnoreCase (string1, string2)

Untuk membandingkan dua sengatan mengabaikan kasus ini.

5 INDEXOF (string, 'character', startIndex)

Mengembalikan kemunculan pertama karakter dalam sebuah string, menelusuri maju dari indeks awal.

6 LAST_INDEX_OF (ekspresi)

Mengembalikan indeks kemunculan terakhir dari sebuah karakter dalam sebuah string, menelusuri mundur dari indeks awal.

7 LCFIRST (ekspresi)

Mengonversi karakter pertama dalam string menjadi huruf kecil.

8 UCFIRST (ekspresi)

Mengembalikan string dengan karakter pertama diubah menjadi huruf besar.

9 UPPER (ekspresi)

UPPER (ekspresi) Mengembalikan string yang diubah menjadi huruf besar.

10 LOWER (ekspresi)

Mengonversi semua karakter dalam string menjadi huruf kecil.

11 REPLACE (string, 'oldChar', 'newChar');

Untuk mengganti karakter yang ada dalam string dengan karakter baru.

12 STRSPLIT (string, regex, limit)

Untuk memisahkan string di sekitar pencocokan ekspresi reguler tertentu.

13 STRSPLITTOBAG (string, regex, limit)

Mirip dengan STRSPLIT() fungsi, itu membagi string dengan pembatas yang diberikan dan mengembalikan hasilnya dalam sebuah tas.

14 TRIM (ekspresi)

Mengembalikan salinan string dengan spasi putih di depan dan di belakangnya dihapus.

15 LTRIM (ekspresi)

Mengembalikan salinan string dengan spasi putih di depannya dihapus.

16 RTRIM (ekspresi)

Mengembalikan salinan string dengan spasi putih di belakangnya dihapus.

Apache Pig menyediakan fungsi Tanggal dan Waktu berikut -

SN Fungsi & Deskripsi
1 ToDate (milidetik)

Fungsi ini mengembalikan objek tanggal-waktu sesuai dengan parameter yang diberikan. Alternatif lain untuk fungsi ini adalah ToDate (iosstring), ToDate (userstring, format), ToDate (userstring, format, timezone)

2 Waktu saat ini()

mengembalikan objek tanggal-waktu dari waktu saat ini.

3 GetDay (tanggal waktu)

Mengembalikan hari dalam sebulan dari objek tanggal-waktu.

4 GetHour (tanggal waktu)

Mengembalikan jam dalam sehari dari objek tanggal-waktu.

5 GetMilliSecond (datetime)

Mengembalikan milidetik detik dari objek tanggal-waktu.

6 GetMinute (tanggal waktu)

Mengembalikan menit dalam satu jam dari objek tanggal-waktu.

7 GetMonth (datetime)

Mengembalikan bulan dalam setahun dari objek tanggal-waktu.

8 GetSecond (datetime)

Mengembalikan detik dalam satu menit dari objek tanggal-waktu.

9 GetWeek (tanggal waktu)

Mengembalikan minggu dalam setahun dari objek tanggal-waktu.

10 GetWeekYear (tanggal waktu)

Mengembalikan tahun minggu dari objek tanggal-waktu.

11 GetYear (tanggal waktu)

Mengembalikan tahun dari objek tanggal-waktu.

12 AddDuration (tanggal waktu, durasi)

Mengembalikan hasil objek tanggal-waktu bersama dengan objek durasi.

13 SubtractDuration (datetime, durasi)

Mengurangi objek Durasi dari objek Tanggal-Waktu dan mengembalikan hasilnya.

14 DaysBetween (datetime1, datetime2)

Mengembalikan jumlah hari antara dua objek tanggal-waktu.

15 HoursBetween (datetime1, datetime2)

Mengembalikan jumlah jam antara dua objek tanggal-waktu.

16 MilliSecondsBetween (datetime1, datetime2)

Mengembalikan jumlah milidetik antara dua objek tanggal-waktu.

17 MinutesBetween (datetime1, datetime2)

Mengembalikan jumlah menit antara dua objek tanggal-waktu.

18 MonthBetween (datetime1, datetime2)

Mengembalikan jumlah bulan antara dua objek tanggal-waktu.

19 SecondsBetween (datetime1, datetime2)

Mengembalikan jumlah detik antara dua objek tanggal-waktu.

20 WeeksBetween (datetime1, datetime2)

Mengembalikan jumlah minggu antara dua objek tanggal-waktu.

21 YearsBetween (datetime1, datetime2)

Mengembalikan jumlah tahun antara dua objek tanggal-waktu.

Kami memiliki fungsi Matematika berikut di Apache Pig -

SN Fungsi & Deskripsi
1 ABS (ekspresi)

Untuk mendapatkan nilai absolut dari sebuah ekspresi.

2 ACOS (ekspresi)

Untuk mendapatkan cosinus busur dari sebuah ekspresi.

3 ASIN (ekspresi)

Untuk mendapatkan sinus busur dari sebuah ekspresi.

4 ATAN (ekspresi)

Fungsi ini digunakan untuk mendapatkan tangen busur dari sebuah ekspresi.

5 CBRT (ekspresi)

Fungsi ini digunakan untuk mendapatkan akar pangkat tiga dari sebuah ekspresi.

6 CEIL (ekspresi)

Fungsi ini digunakan untuk mendapatkan nilai ekspresi yang dibulatkan ke bilangan bulat terdekat.

7 COS (ekspresi)

Fungsi ini digunakan untuk mendapatkan kosinus trigonometri dari sebuah ekspresi.

8 COSH (ekspresi)

Fungsi ini digunakan untuk mendapatkan kosinus hiperbolik sebuah ekspresi.

9 EXP (ekspresi)

Fungsi ini digunakan untuk menaikkan bilangan Euler e menjadi pangkat x.

10 FLOOR (ekspresi)

Untuk mendapatkan nilai ekspresi yang dibulatkan ke bilangan bulat terdekat.

11 LOG (ekspresi)

Untuk mendapatkan logaritma natural (basis e) dari sebuah ekspresi.

12 LOG10 (ekspresi)

Untuk mendapatkan logaritma basis 10 sebuah ekspresi.

13 ACAK ()

Untuk mendapatkan bilangan acak semu (tipe ganda) lebih besar dari atau sama dengan 0,0 dan kurang dari 1,0.

14 ROUND (ekspresi)

Untuk mendapatkan nilai ekspresi yang dibulatkan menjadi bilangan bulat (jika jenis hasil mengambang) atau dibulatkan menjadi panjang (jika jenis hasil ganda).

15 SIN (ekspresi)

Untuk mendapatkan sinus ekspresi.

16 SINH (ekspresi)

Untuk mendapatkan sinus hiperbolik sebuah ekspresi.

17 SQRT (ekspresi)

Untuk mendapatkan akar kuadrat positif dari sebuah ekspresi.

18 TAN (ekspresi)

Untuk mendapatkan tangen trigonometri suatu sudut.

19 TANH (ekspresi)

Untuk mendapatkan tangen hiperbolik sebuah ekspresi.

Selain fungsi bawaan, Apache Pig menyediakan dukungan ekstensif untuk User Defined Functions (UDF's). Dengan menggunakan UDF ini, kita dapat menentukan fungsi kita sendiri dan menggunakannya. Dukungan UDF tersedia dalam enam bahasa pemrograman, yaitu Java, Jython, Python, JavaScript, Ruby dan Groovy.

Untuk menulis UDF, dukungan lengkap disediakan di Java dan dukungan terbatas disediakan di semua bahasa lainnya. Menggunakan Java, Anda dapat menulis UDF yang melibatkan semua bagian pemrosesan seperti pemuatan / penyimpanan data, transformasi kolom, dan agregasi. Sejak Apache Pig ditulis di Java, UDF yang ditulis menggunakan bahasa Java bekerja secara efisien dibandingkan dengan bahasa lain.

Di Apache Pig, kami juga memiliki repositori Java untuk UDF bernama Piggybank. Dengan menggunakan Piggybank, kita dapat mengakses UDF Java yang ditulis oleh pengguna lain, dan menyumbangkan UDF milik kita sendiri.

Jenis UDF di Jawa

Saat menulis UDF menggunakan Java, kita dapat membuat dan menggunakan tiga jenis fungsi berikut -

  • Filter Functions- Fungsi filter digunakan sebagai kondisi dalam pernyataan filter. Fungsi ini menerima nilai Pig sebagai masukan dan mengembalikan nilai Boolean.

  • Eval Functions- Fungsi Eval digunakan dalam pernyataan FOREACH-GENERATE. Fungsi-fungsi ini menerima nilai Pig sebagai masukan dan mengembalikan hasil Pig.

  • Algebraic Functions- Fungsi Aljabar bekerja pada kantong dalam dalam pernyataan FOREACHGENERATE. Fungsi ini digunakan untuk melakukan operasi MapReduce penuh pada tas bagian dalam.

Menulis UDF menggunakan Java

Untuk menulis UDF menggunakan Java, kita harus mengintegrasikan file jar Pig-0.15.0.jar. Di bagian ini, kami membahas cara menulis UDF sampel menggunakan Eclipse. Sebelum melanjutkan lebih jauh, pastikan Anda telah menginstal Eclipse dan Maven di sistem Anda.

Ikuti langkah-langkah yang diberikan di bawah ini untuk menulis fungsi UDF -

  • Buka Eclipse dan buat proyek baru (katakanlah myproject).

  • Ubah proyek yang baru dibuat menjadi proyek Maven.

  • Salin konten berikut di pom.xml. File ini berisi dependensi Maven untuk file jar Apache Pig dan Hadoop-core.

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0http://maven.apache .org/xsd/maven-4.0.0.xsd"> 
	
   <modelVersion>4.0.0</modelVersion> 
   <groupId>Pig_Udf</groupId> 
   <artifactId>Pig_Udf</artifactId> 
   <version>0.0.1-SNAPSHOT</version>
	
   <build>    
      <sourceDirectory>src</sourceDirectory>    
      <plugins>      
         <plugin>        
            <artifactId>maven-compiler-plugin</artifactId>        
            <version>3.3</version>        
            <configuration>          
               <source>1.7</source>          
               <target>1.7</target>        
            </configuration>      
         </plugin>    
      </plugins>  
   </build>
	
   <dependencies> 
	
      <dependency>            
         <groupId>org.apache.pig</groupId>            
         <artifactId>pig</artifactId>            
         <version>0.15.0</version>     
      </dependency> 
		
      <dependency>        
         <groupId>org.apache.hadoop</groupId>            
         <artifactId>hadoop-core</artifactId>            
         <version>0.20.2</version>     
      </dependency> 
      
   </dependencies>  
	
</project>
  • Simpan file dan segarkan. DalamMaven Dependencies bagian, Anda dapat menemukan file jar yang diunduh.

  • Buat file kelas baru dengan nama Sample_Eval dan salin konten berikut di dalamnya.

import java.io.IOException; 
import org.apache.pig.EvalFunc; 
import org.apache.pig.data.Tuple; 
 
import java.io.IOException; 
import org.apache.pig.EvalFunc; 
import org.apache.pig.data.Tuple;

public class Sample_Eval extends EvalFunc<String>{ 

   public String exec(Tuple input) throws IOException {   
      if (input == null || input.size() == 0)      
      return null;      
      String str = (String)input.get(0);      
      return str.toUpperCase();  
   } 
}

Saat menulis UDF, itu wajib untuk mewarisi kelas EvalFunc dan menyediakan implementasi ke exec()fungsi. Dalam fungsi ini, kode yang diperlukan untuk UDF ditulis. Dalam contoh di atas, kami telah mengembalikan kode untuk mengubah konten kolom yang diberikan menjadi huruf besar.

  • Setelah menyusun kelas tanpa kesalahan, klik kanan pada file Sample_Eval.java. Ini memberi Anda menu. Pilihexport seperti yang ditunjukkan pada tangkapan layar berikut.

  • Saat mengklik export, Anda akan mendapatkan jendela berikut. KlikJAR file.

  • Lanjutkan lebih jauh dengan mengklik Next>tombol. Anda akan mendapatkan jendela lain di mana Anda harus memasukkan jalur di sistem file lokal, tempat Anda perlu menyimpan file jar.

  • Terakhir, klik Finishtombol. Di folder yang ditentukan, file Jarsample_udf.jardibuat. File jar ini berisi UDF yang ditulis dalam Java.

Menggunakan UDF

Setelah menulis UDF dan menghasilkan file Jar, ikuti langkah-langkah yang diberikan di bawah ini -

Langkah 1: Mendaftarkan file Jar

Setelah menulis UDF (di Java) kita harus mendaftarkan file Jar yang berisi UDF menggunakan operator Register. Dengan mendaftarkan file Jar, pengguna dapat mengetahui lokasi UDF ke Apache Pig.

Syntax

Diberikan di bawah ini adalah sintaks dari operator Register.

REGISTER path;

Example

Sebagai contoh mari kita daftarkan sample_udf.jar yang dibuat sebelumnya di bab ini.

Mulai Apache Pig dalam mode lokal dan daftarkan file jar sample_udf.jar seperti yang ditunjukkan di bawah ini.

$cd PIG_HOME/bin $./pig –x local 

REGISTER '/$PIG_HOME/sample_udf.jar'

Note - asumsikan file Jar di jalur - /$PIG_HOME/sample_udf.jar

Langkah 2: Mendefinisikan Alias

Setelah mendaftarkan UDF kita dapat mendefinisikan alias untuk itu menggunakan Define operator.

Syntax

Diberikan di bawah ini adalah sintaks dari operator Define.

DEFINE alias {function | [`command` [input] [output] [ship] [cache] [stderr] ] };

Example

Tentukan alias untuk sample_eval seperti yang ditunjukkan di bawah ini.

DEFINE sample_eval sample_eval();

Langkah 3: Menggunakan UDF

Setelah mendefinisikan alias Anda dapat menggunakan UDF yang sama dengan fungsi bawaan. Misalkan ada file bernama emp_data di HDFS/Pig_Data/ direktori dengan konten berikut.

001,Robin,22,newyork
002,BOB,23,Kolkata
003,Maya,23,Tokyo
004,Sara,25,London 
005,David,23,Bhuwaneshwar 
006,Maggy,22,Chennai
007,Robert,22,newyork
008,Syam,23,Kolkata
009,Mary,25,Tokyo
010,Saran,25,London 
011,Stacy,25,Bhuwaneshwar 
012,Kelly,22,Chennai

Dan asumsikan kita telah memuat file ini ke Pig seperti yang ditunjukkan di bawah ini.

grunt> emp_data = LOAD 'hdfs://localhost:9000/pig_data/emp1.txt' USING PigStorage(',')
   as (id:int, name:chararray, age:int, city:chararray);

Sekarang mari kita ubah nama karyawan menjadi huruf besar menggunakan UDF sample_eval.

grunt> Upper_case = FOREACH emp_data GENERATE sample_eval(name);

Verifikasi konten relasi Upper_case seperti gambar dibawah.

grunt> Dump Upper_case;
  
(ROBIN)
(BOB)
(MAYA)
(SARA)
(DAVID)
(MAGGY)
(ROBERT)
(SYAM)
(MARY)
(SARAN)
(STACY)
(KELLY)

Di sini, di bab ini, kita akan melihat bagaimana menjalankan skrip Apache Pig dalam mode batch.

Komentar di Pig Script

Saat menulis skrip dalam file, kami dapat menyertakan komentar di dalamnya seperti yang ditunjukkan di bawah ini.

Komentar multi-baris

Kami akan memulai komentar banyak baris dengan '/ *', mengakhirinya dengan '* /'.

/* These are the multi-line comments 
  In the pig script */

Komentar satu baris

Kami akan memulai komentar satu baris dengan '-'.

--we can write single line comments like this.

Menjalankan Skrip Babi dalam mode Batch

Saat menjalankan pernyataan Apache Pig dalam mode batch, ikuti langkah-langkah yang diberikan di bawah ini.

Langkah 1

Tulis semua pernyataan Pig Latin yang diperlukan dalam satu file. Kita dapat menulis semua pernyataan dan perintah Pig Latin dalam satu file dan menyimpannya sebagai.pig mengajukan.

Langkah 2

Jalankan skrip Apache Pig. Anda dapat menjalankan skrip Pig dari shell (Linux) seperti yang ditunjukkan di bawah ini.

Mode lokal Mode MapReduce
$ babi -x lokal Sample_script.pig $ pig -x mapreduce Sample_script.pig

Anda dapat menjalankannya dari shell Grunt juga menggunakan perintah exec seperti yang ditunjukkan di bawah ini.

grunt> exec /sample_script.pig

Menjalankan Skrip Babi dari HDFS

Kami juga dapat menjalankan skrip Pig yang berada di HDFS. Misalkan ada script Pig dengan namaSample_script.pig di direktori HDFS bernama /pig_data/. Kami dapat menjalankannya seperti yang ditunjukkan di bawah ini.

$ pig -x mapreduce hdfs://localhost:9000/pig_data/Sample_script.pig

Contoh

Asumsikan kita memiliki file student_details.txt dalam HDFS dengan konten berikut.

student_details.txt

001,Rajiv,Reddy,21,9848022337,Hyderabad 
002,siddarth,Battacharya,22,9848022338,Kolkata
003,Rajesh,Khanna,22,9848022339,Delhi 
004,Preethi,Agarwal,21,9848022330,Pune 
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar 
006,Archana,Mishra,23,9848022335,Chennai 
007,Komal,Nayak,24,9848022334,trivendram 
008,Bharathi,Nambiayar,24,9848022333,Chennai

Kami juga memiliki contoh skrip dengan nama sample_script.pig, di direktori HDFS yang sama. File ini berisi pernyataan yang melakukan operasi dan transformasi padastudent relasi, seperti yang ditunjukkan di bawah ini.

student = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
   as (id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray);
	
student_order = ORDER student BY age DESC;
  
student_limit = LIMIT student_order 4;
  
Dump student_limit;
  • Pernyataan pertama dari skrip akan memuat data dalam file bernama student_details.txt sebagai relasi bernama student.

  • Pernyataan kedua dari skrip akan menyusun tupel relasi dalam urutan menurun, berdasarkan usia, dan menyimpannya sebagai student_order.

  • Pernyataan ketiga dari skrip akan menyimpan 4 tupel pertama dari student_order sebagai student_limit.

  • Akhirnya pernyataan keempat akan membuang konten relasi student_limit.

Sekarang mari kita jalankan sample_script.pig seperti gambar dibawah.

$./pig -x mapreduce hdfs://localhost:9000/pig_data/sample_script.pig

Apache Pig dijalankan dan memberi Anda output dengan konten berikut.

(7,Komal,Nayak,24,9848022334,trivendram)
(8,Bharathi,Nambiayar,24,9848022333,Chennai) 
(5,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar) 
(6,Archana,Mishra,23,9848022335,Chennai)
2015-10-19 10:31:27,446 [main] INFO  org.apache.pig.Main - Pig script completed in 12
minutes, 32 seconds and 751 milliseconds (752751 ms)