Apache Pig - Hızlı Kılavuz

Apache Pig nedir?

Apache Pig, MapReduce üzerinde bir soyutlamadır. Veri akışları olarak temsil eden daha büyük veri kümelerini analiz etmek için kullanılan bir araç / platformdur. Domuz genellikleHadoop; Apache Pig kullanarak Hadoop'ta tüm veri işleme işlemlerini gerçekleştirebiliriz.

Veri analizi programları yazmak için Pig, şu adla bilinen üst düzey bir dil sağlar: Pig Latin. Bu dil, programcıların verileri okumak, yazmak ve işlemek için kendi işlevlerini geliştirebilecekleri çeşitli operatörler sağlar.

Verileri kullanarak analiz etmek için Apache Pigprogramcıların Pig Latin dilini kullanarak komut dosyaları yazması gerekir. Tüm bu komut dosyaları dahili olarak Harita ve Azaltma görevlerine dönüştürülür. Apache Pig olarak bilinen bir bileşen vardırPig Engine Pig Latin komut dosyalarını girdi olarak kabul eder ve bu komut dosyalarını MapReduce işlerine dönüştürür.

Apache Pig'e Neden İhtiyacımız Var?

Java konusunda çok iyi olmayan programcılar normalde Hadoop ile çalışırken, özellikle de herhangi bir MapReduce görevini gerçekleştirirken zorluk çekerlerdi. Apache Pig, bu tür tüm programcılar için bir nimettir.

  • Kullanma Pig Latinprogramcılar, Java'da karmaşık kodlar yazmak zorunda kalmadan MapReduce görevlerini kolayca gerçekleştirebilirler.

  • Apache Pig kullanır multi-query approach, böylece kodların uzunluğunu azaltır. Örneğin, Java'da 200 satır kod (LoC) yazmanızı gerektiren bir işlem, Apache Pig'de sadece 10 LoC'den daha az yazı yazarak kolayca yapılabilir. Sonuçta Apache Pig, geliştirme süresini neredeyse 16 kat azaltır.

  • Domuz Latince SQL-like language ve SQL'e aşina olduğunuzda Apache Pig'i öğrenmek kolaydır.

  • Apache Pig, birleştirmeler, filtreler, sıralama vb. Gibi veri işlemlerini desteklemek için birçok yerleşik operatör sağlar. Ayrıca, MapReduce'ta eksik olan tuple, çanta ve haritalar gibi iç içe veri türleri de sağlar.

Domuzun Özellikleri

Apache Pig aşağıdaki özelliklerle birlikte gelir -

  • Rich set of operators - Birçok operatörün birleştirme, sıralama, filtreleme vb. İşlemleri gerçekleştirmesini sağlar.

  • Ease of programming - Pig Latin, SQL'e benzer ve SQL'de iyiyseniz Pig komut dosyası yazmak kolaydır.

  • Optimization opportunities - Apache Pig'deki görevler, yürütmelerini otomatik olarak optimize eder, bu nedenle programcıların yalnızca dilin anlambilimine odaklanmaları gerekir.

  • Extensibility - Kullanıcılar, mevcut operatörleri kullanarak verileri okumak, işlemek ve yazmak için kendi işlevlerini geliştirebilirler.

  • UDF’s - Pig tesisin yaratmasını sağlar User-defined Functions Java gibi diğer programlama dillerinde ve bunları Pig Komut Dosyalarına çağırın veya gömün.

  • Handles all kinds of data- Apache Pig, hem yapılandırılmış hem de yapılandırılmamış her türlü veriyi analiz eder. Sonuçları HDFS'de depolar.

Apache Pig Vs MapReduce

Aşağıda, Apache Pig ve MapReduce arasındaki başlıca farklar listelenmiştir.

Apaçi Domuzu Harita indirgeme
Apache Pig bir veri akışı dilidir. MapReduce bir veri işleme paradigmasıdır.
Yüksek seviyeli bir dildir. MapReduce düşük seviyeli ve katıdır.
Apache Pig'de bir Birleştirme işlemi gerçekleştirmek oldukça basittir. Veri kümeleri arasında bir Birleştirme işlemi gerçekleştirmek MapReduce'ta oldukça zordur.
Temel SQL bilgisine sahip herhangi bir acemi programcı Apache Pig ile rahatça çalışabilir. Java'ya maruz kalma, MapReduce ile çalışmalıdır.
Apache Pig, çoklu sorgulama yaklaşımını kullanır, böylece kodların uzunluğunu büyük ölçüde azaltır. MapReduce, aynı görevi gerçekleştirmek için neredeyse 20 kat daha fazla satır gerektirir.
Derlemeye gerek yoktur. Yürütme sırasında, her Apache Pig operatörü dahili olarak bir MapReduce işine dönüştürülür. MapReduce işlerinin uzun bir derleme süreci vardır.

Apache Pig ve SQL

Aşağıda Apache Pig ve SQL arasındaki temel farklar listelenmiştir.

Domuz SQL
Domuz Latince bir procedural dil. SQL bir declarative dil.
Apaçi Domuzunda, schemaİsteğe bağlı. Bir şema tasarlamadan verileri depolayabiliriz (değerler şu şekilde saklanır$01, $02 vb.) SQL'de şema zorunludur.
Apache Pig'deki veri modeli nested relational. SQL'de kullanılan veri modeli is flat relational.
Apache Pig, aşağıdakiler için sınırlı fırsat sağlar: Query optimization. SQL'de sorgu optimizasyonu için daha fazla fırsat var.

Yukarıdaki farklılıklara ek olarak, Apache Pig Latin -

  • İşlem hattında bölmelere izin verir.
  • Geliştiricilerin ardışık düzen içinde herhangi bir yerde veri depolamasına izin verir.
  • Uygulama planlarını açıklar.
  • Operatörlerin ETL (Çıkart, Dönüştür ve Yükle) işlevlerini gerçekleştirmesini sağlar.

Apache Pig Vs Kovan

MapReduce işleri oluşturmak için hem Apache Pig hem de Hive kullanılır. Ve bazı durumlarda, Hive, HDFS üzerinde Apache Pig'in yaptığı gibi çalışır. Aşağıdaki tabloda, Apache Pig'i Hive'dan ayıran birkaç önemli noktayı listeledik.

Apaçi Domuzu Kovan
Apache Pig, Pig Latin. Başlangıçta şu saatte oluşturuldu:Yahoo. Hive adlı bir dil kullanır HiveQL. Başlangıçta şu saatte oluşturuldu:Facebook.
Domuz Latince bir veri akışı dilidir. HiveQL, bir sorgu işleme dilidir.
Pig Latince prosedürel bir dildir ve boru hattı paradigmasına uymaktadır. HiveQL, bildirim temelli bir dildir.
Apache Pig, yapılandırılmış, yapılandırılmamış ve yarı yapılandırılmış verileri işleyebilir. Hive, çoğunlukla yapılandırılmış veriler içindir.

Apache Pig Uygulamaları

Apache Pig, genellikle veri bilimcileri tarafından geçici işleme ve hızlı prototip oluşturmayı içeren görevleri gerçekleştirmek için kullanılır. Apache Pig kullanılır -

  • Web günlükleri gibi büyük veri kaynaklarını işlemek için.
  • Arama platformları için veri işlemeyi gerçekleştirmek.
  • Zamana duyarlı veri yüklerini işlemek için.

Apache Pig - Tarihçe

İçinde 2006Apache Pig, özellikle her veri kümesinde MapReduce işleri oluşturmak ve yürütmek için Yahoo'da bir araştırma projesi olarak geliştirildi. İçinde2007Apache Pig, Apache inkübatörü aracılığıyla açık kaynaklıydı. İçinde2008Apache Pig'in ilk sürümü çıktı. İçinde2010Apache Pig, Apache üst düzey proje olarak mezun oldu.

Pig kullanarak Hadoop'ta verileri analiz etmek için kullanılan dil şu şekilde bilinir: Pig Latin. Veriler üzerinde çeşitli işlemleri gerçekleştirmek için zengin bir veri türü ve operatör kümesi sağlayan yüksek düzeyli bir veri işleme dilidir.

Programcıların Pig kullanarak belirli bir görevi gerçekleştirmek için, programcıların Pig Latin dilini kullanarak bir Pig betiği yazmaları ve bunları yürütme mekanizmalarından herhangi birini (Grunt Shell, UDFs, Embedded) kullanarak yürütmeleri gerekir. Yürütmeden sonra, bu komut dosyaları istenen çıktıyı üretmek için Pig Framework tarafından uygulanan bir dizi dönüşümden geçecektir.

Apache Pig, dahili olarak bu komut dosyalarını bir dizi MapReduce işine dönüştürür ve böylece programcının işini kolaylaştırır. Apache Pig'in mimarisi aşağıda gösterilmiştir.

Apache Pig Bileşenleri

Şekilde gösterildiği gibi, Apache Pig çerçevesinde çeşitli bileşenler bulunmaktadır. Ana bileşenlere bir göz atalım.

Ayrıştırıcı

Başlangıçta Domuz Komut Dosyaları, Ayrıştırıcı tarafından işlenir. Komut dizisinin sözdizimini kontrol eder, tip kontrolü ve diğer çeşitli kontroller yapar. Ayrıştırıcının çıktısı, Pig Latin ifadelerini ve mantıksal işleçleri temsil eden bir DAG (döngüsel olmayan grafik) olacaktır.

DAG'de, komut dosyasının mantıksal operatörleri düğümler olarak temsil edilir ve veri akışları kenarlar olarak temsil edilir.

Optimizer

Mantıksal plan (DAG), projeksiyon ve aşağı itme gibi mantıksal optimizasyonları gerçekleştiren mantıksal optimize ediciye aktarılır.

Derleyici

Derleyici, optimize edilmiş mantıksal planı bir dizi MapReduce görevi halinde derler.

Yürütme motoru

Son olarak, MapReduce işleri sıralı bir sırada Hadoop'a gönderilir. Son olarak, bu MapReduce işleri, istenen sonuçları vererek Hadoop'ta yürütülür.

Domuz Latin Veri Modeli

Pig Latin veri modeli tamamen yuvalanmıştır ve aşağıdaki gibi karmaşık atomik olmayan veri türlerine izin verir. map ve tuple. Aşağıda, Pig Latin'in veri modelinin şematik temsilidir.

Atom

Pig Latince'deki herhangi bir tek değer, verilerinden bağımsız olarak, tür olarak bilinir Atom. String olarak saklanır ve string ve sayı olarak kullanılabilir. int, long, float, double, chararray ve bytearray Pig'in atomik değerleridir. Bir veri parçası veya basit bir atomik değer,field.

Example - 'raja' veya '30'

Tuple

Sıralı bir alan kümesi tarafından oluşturulan bir kayıt, bir demet olarak bilinir, alanlar herhangi bir türde olabilir. Bir demet, RDBMS tablosundaki bir satıra benzer.

Example - (Raja, 30)

Sırt çantası

Çanta, sıralanmamış bir demet kümesidir. Başka bir deyişle, bir grup (benzersiz olmayan) bir çanta olarak bilinir. Her demet herhangi bir sayıda alana sahip olabilir (esnek şema). Çanta, '{}' ile temsil edilir. RDBMS'deki bir tabloya benzer, ancak RDBMS'deki bir tablodan farklı olarak, her dizinin aynı sayıda alan içermesi veya aynı konumdaki (sütun) alanların aynı türe sahip olması gerekmez.

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

Çanta, ilişkideki bir alan olabilir; bu bağlamda olarak bilinirinner bag.

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

Harita

Bir harita (veya veri haritası), bir dizi anahtar-değer çiftidir. keychararray türünde olmalı ve benzersiz olmalıdır. valueherhangi bir türde olabilir. "[]" İle temsil edilir

Example - [isim # Raja, 30 yaşında]

İlişki

Bir ilişki bir demet torbasıdır. Domuz Latince'deki ilişkiler sırasızdır (tupleların belirli bir sırada işleneceğinin garantisi yoktur).

Bu bölüm nasıl indirileceğini, kurulacağını ve kurulacağını açıklar Apache Pig sisteminizde.

Önkoşullar

Apache Pig'e gitmeden önce sisteminizde Hadoop ve Java'nın kurulu olması önemlidir. Bu nedenle, Apache Pig'i yüklemeden önce, aşağıdaki bağlantıda verilen adımları izleyerek Hadoop ve Java'yı yükleyin -

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

Apache Pig'i indirin

Öncelikle, aşağıdaki web sitesinden Apache Pig'in en son sürümünü indirin - https://pig.apache.org/

Aşama 1

Apache Pig web sitesinin ana sayfasını açın. Bölümün altındaNews, linki tıkla release page aşağıdaki anlık görüntüde gösterildiği gibi.

Adım 2

Belirtilen bağlantıya tıkladığınızda, şuraya yönlendirileceksiniz: Apache Pig Releasessayfa. Bu sayfada, altındaDownload bölümünde, iki bağlantınız olacak, yani Pig 0.8 and later ve Pig 0.7 and before. Linki tıklaPig 0.8 and later, ardından bir dizi aynanın bulunduğu sayfaya yönlendirileceksiniz.

Aşama 3

Aşağıda gösterildiği gibi bu aynalardan herhangi birini seçin ve tıklayın.

4. adım

Bu aynalar sizi Pig Releasessayfa. Bu sayfa, Apache Pig'in çeşitli sürümlerini içerir. Aralarında en son sürüme tıklayın.

Adım 5

Bu klasörler içinde, çeşitli dağıtımlarda Apache Pig'in kaynak ve ikili dosyalarına sahip olacaksınız. Apache Pig 0.15'in kaynak ve ikili dosyalarının tar dosyalarını indirin,pig0.15.0-src.tar.gz ve pig-0.15.0.tar.gz.

Apache Pig'i yükleyin

Apache Pig yazılımını indirdikten sonra, aşağıda verilen adımları takip ederek Linux ortamınıza kurun.

Aşama 1

Kurulum dizinlerinin bulunduğu dizinde Pig adıyla bir dizin oluşturun. Hadoop, Java,ve diğer yazılımlar yüklendi. (Eğitimimizde, Hadoop adlı kullanıcıda Pig dizinini oluşturduk).

$ mkdir Pig

Adım 2

İndirilen tar dosyalarını aşağıda gösterildiği gibi çıkarın.

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

Aşama 3

İçeriğini taşı pig-0.15.0-src.tar.gz dosyaya Pig aşağıda gösterildiği gibi daha önce oluşturulmuş dizin.

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

Apache Pig'i yapılandırın

Apache Pig'i kurduktan sonra, onu yapılandırmamız gerekiyor. Yapılandırmak için iki dosyayı düzenlememiz gerekiyor -bashrc and pig.properties.

.bashrc dosyası

İçinde .bashrc dosya, aşağıdaki değişkenleri ayarlayın -

  • PIG_HOME Apache Pig kurulum klasörüne klasör,

  • PATH bin klasörüne ortam değişkeni ve

  • PIG_CLASSPATH Hadoop kurulumlarınızın etc (konfigürasyon) klasörüne (core-site.xml, hdfs-site.xml ve mapred-site.xml dosyalarını içeren dizin) ortam değişkeni.

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

pig.properties dosyası

İçinde conf Pig klasörü, adında bir dosyamız var pig.properties. Pig.properties dosyasında, aşağıda verildiği gibi çeşitli parametreleri ayarlayabilirsiniz.

pig -h properties

Aşağıdaki özellikler desteklenmektedir -

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.

Kurulumu Doğrulama

Version komutunu yazarak Apache Pig kurulumunu doğrulayın. Kurulum başarılı olursa, aşağıda gösterildiği gibi Apache Pig sürümünü alacaksınız.

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

Önceki bölümde Apache Pig'in nasıl kurulacağını anlatmıştık. Bu bölümde Apache Pig'in nasıl çalıştırılacağını tartışacağız.

Apache Pig Yürütme Modları

Apache Pig'i iki modda çalıştırabilirsiniz: Local Mode ve HDFS mode.

Yerel mod

Bu modda, tüm dosyalar yerel ana bilgisayarınızdan ve yerel dosya sisteminizden yüklenir ve çalıştırılır. Hadoop veya HDFS'ye gerek yoktur. Bu mod genellikle test amaçlı kullanılır.

MapReduce Modu

MapReduce modu, Apache Pig kullanarak Hadoop Dosya Sisteminde (HDFS) bulunan verileri yüklediğimiz veya işlediğimiz yerdir. Bu modda, veriyi işlemek için Pig Latin ifadelerini her çalıştırdığımızda, HDFS'de bulunan veriler üzerinde belirli bir işlemi gerçekleştirmek için arka uçta bir MapReduce işi başlatılır.

Apache Domuz Yürütme Mekanizmaları

Apache Pig komut dosyaları etkileşimli mod, toplu mod ve gömülü mod olmak üzere üç şekilde yürütülebilir.

  • Interactive Mode(Grunt shell) - Grunt kabuğunu kullanarak Apache Pig'i etkileşimli modda çalıştırabilirsiniz. Bu kabukta, Pig Latin ifadelerini girebilir ve çıktıyı alabilirsiniz (Dump operatörünü kullanarak).

  • Batch Mode (Script) - Pig Latin komut dosyasını tek bir dosyaya yazarak Apache Pig'i Toplu modda çalıştırabilirsiniz. .pig uzantı.

  • Embedded Mode (UDF) - Apache Pig, kendi işlevlerimizi tanımlama hükmünü sağlar (User Dtanımlanmış Functions) Java gibi programlama dillerinde ve bunları komut dosyamızda kullanarak.

Grunt Shell'i Çağırmak

Grunt kabuğunu istediğiniz bir modda (local / MapReduce) çağırabilirsiniz. −x seçeneği aşağıda gösterildiği gibi.

Yerel mod MapReduce modu

Command −

$ ./pig –x yerel

Command −

$ ./pig -x mapreduce

Output -

Output -

Bu komutlardan herhangi biri size aşağıda gösterildiği gibi Grunt kabuğu komutunu verir.

grunt>

Grunt kabuğundan çıkabilirsiniz. ‘ctrl + d’.

Grunt kabuğunu çağırdıktan sonra, doğrudan Pig Latin ifadelerini içine girerek bir Pig betiğini çalıştırabilirsiniz.

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

Apache Pig'i Toplu Kipte Yürütme

Tüm bir Pig Latin alfabesini bir dosyaya yazabilir ve bunu kullanarak çalıştırabilirsiniz. –x command. Adlı bir dosyada Pig betiğimiz olduğunu varsayalım.sample_script.pig Aşağıda gösterildiği gibi.

Sample_script.pig

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

Şimdi, yukarıdaki dosyadaki komut dosyasını aşağıda gösterildiği gibi çalıştırabilirsiniz.

Yerel mod MapReduce modu
$ pig -x yerel Sample_script.pig $ domuz -x mapreduce Sample_script.pig

Note - Pig betiğinin nasıl çalıştırılacağını ayrıntılı olarak tartışacağız. Bach mode ve embedded mode sonraki bölümlerde.

Grunt kabuğunu çalıştırdıktan sonra, Pig komut dosyalarınızı kabukta çalıştırabilirsiniz. Buna ek olarak, Grunt kabuğu tarafından sağlanan bazı yararlı kabuk ve yardımcı program komutları vardır. Bu bölüm, Grunt kabuğu tarafından sağlanan kabuk ve yardımcı program komutlarını açıklamaktadır.

Note - Bu bölümün bazı kısımlarında aşağıdaki gibi komutlar Load ve Storekullanılmış. Bunlar hakkında ayrıntılı bilgi almak için ilgili bölümlere bakın.

Kabuk Komutları

Apache Pig'in Grunt kabuğu, çoğunlukla Pig Latince komut dosyalarını yazmak için kullanılır. Bundan önce, kullanarak herhangi bir kabuk komutunu çağırabiliriz.sh ve fs.

sh Komutu

Kullanma shkomutuyla, Grunt kabuğundan herhangi bir kabuk komutunu çağırabiliriz. Kullanmash Grunt kabuğundan gelen komut, kabuk ortamının bir parçası olan komutları yürütemiyoruz (ex - cd).

Syntax

Aşağıda verilen sözdizimi sh komut.

grunt> sh shell command parameters

Example

Çağırabiliriz ls Grunt kabuğundan Linux kabuğunun komutu, shseçeneği aşağıda gösterildiği gibi. Bu örnekte, içindeki dosyaları listeler./pig/bin/ dizin.

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

fs Komutu

Kullanmak fs komutu, Grunt kabuğundan herhangi bir FsShell komutunu çağırabiliriz.

Syntax

Aşağıda verilen sözdizimi fs komut.

grunt> sh File System command parameters

Example

HDFS'nin ls komutunu fs komutunu kullanarak Grunt kabuğundan çağırabiliriz. Aşağıdaki örnekte, HDFS kök dizinindeki dosyaları listeler.

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

Aynı şekilde, Grunt kabuğundaki diğer tüm dosya sistemi kabuk komutlarını kullanarak fs komut.

Yardımcı Program Komutları

Grunt kabuğu, bir dizi yardımcı program komutu sağlar. Bunlar, aşağıdaki gibi yardımcı program komutlarını içerir:clear, help, history, quit, ve set; ve gibi komutlarexec, kill, ve runGrunt kabuğundan Pig'i kontrol etmek için. Aşağıda, Grunt kabuğu tarafından sağlanan yardımcı program komutlarının açıklaması verilmiştir.

temizle Komutu

clear komutu Grunt kabuğunun ekranını temizlemek için kullanılır.

Syntax

Grunt shell ekranını, clear komutu aşağıda gösterildiği gibi.

grunt> clear

yardım Komutu

help komutu size Pig komutlarının veya Pig özelliklerinin bir listesini verir.

Usage

Kullanarak Pig komutlarının bir listesini alabilirsiniz. help komutu aşağıda gösterildiği gibi.

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.

tarih Komutanlığı

Bu komut, Grunt satışının başlatılmasından bu yana şu ana kadar yürütülen / kullanılan ifadelerin bir listesini görüntüler.

Usage

Grunt kabuğunu açtığımızdan beri üç ifade yürüttüğümüzü varsayalım.

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(',');

Daha sonra history komutu aşağıdaki çıktıyı üretecektir.

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(',');

Komut ayarla

set komutu, Pig'de kullanılan tuşlara değerleri göstermek / atamak için kullanılır.

Usage

Bu komutu kullanarak aşağıdaki tuşlara değerler ayarlayabilirsiniz.

Anahtar Açıklama ve değerler
default_parallel Herhangi bir tam sayıyı bu anahtara bir değer olarak geçirerek bir harita işi için azaltıcı sayısını ayarlayabilirsiniz.
debug Bu anahtara açıp / kapatarak Pig'deki hata ayıklama freature'ı kapatabilir veya açabilirsiniz.
job.name Bu anahtara bir dize değeri ileterek İş adını gerekli işe ayarlayabilirsiniz.
job.priority

Aşağıdaki değerlerden birini bu anahtara geçirerek iş önceliğini bir işe ayarlayabilirsiniz -

  • very_low
  • low
  • normal
  • high
  • very_high
stream.skippath Akış için, istenen yolu bir dize biçiminde bu anahtara ileterek verilerin aktarılmayacağı yolu ayarlayabilirsiniz.

Komutu bırak

Bu komutu kullanarak Grunt kabuğundan çıkabilirsiniz.

Usage

Aşağıda gösterildiği gibi Grunt kabuğundan çıkın.

grunt> quit

Şimdi Apache Pig'i Grunt kabuğundan kontrol edebileceğiniz komutlara bir göz atalım.

exec Komutu

Kullanmak exec komutu, Grunt kabuğundan Pig betiklerini çalıştırabiliriz.

Syntax

Aşağıda, yardımcı program komutunun sözdizimi verilmiştir. exec.

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

Example

Adında bir dosya olduğunu varsayalım student.txt içinde /pig_data/ aşağıdaki içeriğe sahip HDFS dizini.

Student.txt

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

Ve adında bir komut dosyamız olduğunu varsayalım. sample_script.pig içinde /pig_data/ aşağıdaki içeriğe sahip HDFS dizini.

Sample_script.pig

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

Şimdi, yukarıdaki betiği Grunt kabuğundan çalıştıralım. exec komutu aşağıda gösterildiği gibi.

grunt> exec /sample_script.pig

Output

exec komutu, komut dosyasını sample_script.pig. Komut dosyasında belirtildiği gibi,student.txt dosyasını Pig'e aktarır ve size aşağıdaki içeriği görüntüleyen Dump işlecinin sonucunu verir.

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

Komutu öldür

Bu komutu kullanarak Grunt kabuğundan bir işi öldürebilirsiniz.

Syntax

Aşağıda verilen sözdizimi kill komut.

grunt> kill JobId

Example

Kimliği olan çalışan bir Pig işi olduğunu varsayalım Id_0055, onu kullanarak Grunt kabuğundan öldürebilirsiniz. kill komutu aşağıda gösterildiği gibi.

grunt> kill Id_0055

Komutu çalıştır

Grunt kabuğundan bir Pig komut dosyası çalıştırabilirsiniz. run komut

Syntax

Aşağıda verilen sözdizimi run komut.

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

Example

Adında bir dosya olduğunu varsayalım student.txt içinde /pig_data/ aşağıdaki içeriğe sahip HDFS dizini.

Student.txt

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

Ve adında bir komut dosyamız olduğunu varsayalım. sample_script.pig aşağıdaki içeriğe sahip yerel dosya sisteminde.

Sample_script.pig

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

Şimdi yukarıdaki betiği aşağıda gösterildiği gibi çalıştır komutunu kullanarak Grunt kabuğundan çalıştıralım.

grunt> run /sample_script.pig

Komut dosyasının çıktısını, Dump operator Aşağıda gösterildiği gibi.

grunt> Dump;

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

Note - arasındaki fark exec ve run komut, eğer kullanırsak run, komut dosyasındaki ifadeler komut geçmişinde mevcuttur.

Domuz Latin, Apache Pig kullanarak Hadoop'taki verileri analiz etmek için kullanılan dildir. Bu bölümde, Pig Latince ifadeleri, veri türleri, genel ve ilişkisel operatörler ve Pig Latin UDF'ler gibi Pig Latince'nin temellerini tartışacağız.

Domuz Latin - Veri Modeli

Önceki bölümlerde tartışıldığı gibi, Pig'in veri modeli tamamen iç içe geçmiştir. BirRelationPig Latin veri modelinin en dıştaki yapısıdır. Ve bu birbag nerede -

  • Çanta, bir demet koleksiyonudur.
  • Demet, sıralı bir alan kümesidir.
  • Alan, bir veri parçasıdır.

Domuz Latin - Statemets

Pig Latin kullanarak verileri işlerken, statements temel yapılardır.

  • Bu ifadeler ile çalışır relations. İçerirlerexpressions ve schemas.

  • Her ifade bir noktalı virgülle (;) biter.

  • Pig Latin tarafından sağlanan operatörleri kullanarak ifadeler aracılığıyla çeşitli işlemleri gerçekleştireceğiz.

  • LOAD ve STORE dışında, diğer tüm işlemleri gerçekleştirirken, Pig Latin ifadeleri girdi olarak bir ilişki alır ve çıktı olarak başka bir ilişki üretir.

  • Bir girdiğiniz anda Loadifadesi Grunt kabuğundaki anlamsal denetimi yapılacaktır. Şemanın içeriğini görmek için,DumpŞebeke. Sadece yaptıktan sonradump işlem, verilerin dosya sistemine yüklenmesi için MapReduce işi gerçekleştirilecektir.

Misal

Aşağıda, verileri Apache Pig'e yükleyen bir Pig Latince ifadesi verilmiştir.

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

Domuz Latin - Veri türleri

Aşağıdaki tablo, Domuz Latin veri türlerini açıklamaktadır.

SN Veri tipi Açıklama ve Örnek
1 int

İmzalı bir 32 bit tamsayıyı temsil eder.

Example : 8

2 uzun

İmzalı bir 64 bit tamsayıyı temsil eder.

Example : 5L

3 yüzen

İşaretli bir 32 bit kayan noktayı temsil eder.

Example : 5.5F

4 çift

64 bitlik bir kayan noktayı temsil eder.

Example : 10.5

5 chararray

Unicode UTF-8 biçiminde bir karakter dizisini (dizeyi) temsil eder.

Example : 'öğreticiler noktası'

6 Bytearray

Bir Bayt dizisini (blob) temsil eder.

7 Boole

Bir Boolean değerini temsil eder.

Example : doğru yanlış.

8 Tarih saat

Bir tarih-saati temsil eder.

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

9 Biginteger

Java BigInteger'ı temsil eder.

Example : 60708090709

10 Büyük ondalık

Java BigDecimal'i temsil eder

Example : 185.98376256272893883

Karmaşık Tipler
11 Tuple

Demet, sıralı bir alan kümesidir.

Example : (raja, 30)

12 Sırt çantası

Çanta, bir demet koleksiyonudur.

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

13 Harita

Harita, bir dizi anahtar / değer çiftidir.

Example : ["ad" # "Raju", "yaş" # 30]

Boş Değerler

Yukarıdaki veri türlerinin tümü için değerler NULL olabilir. Apache Pig, boş değerleri SQL'e benzer şekilde ele alır.

Boş, bilinmeyen bir değer veya var olmayan bir değer olabilir. İsteğe bağlı değerler için yer tutucu olarak kullanılır. Bu boşluklar doğal olarak ortaya çıkabilir veya bir işlemin sonucu olabilir.

Domuz Latin - Aritmetik Operatörler

Aşağıdaki tablo Pig Latince'nin aritmetik işleçlerini açıklamaktadır. A = 10 ve b = 20 varsayalım.

Şebeke Açıklama Misal
+

Addition - Operatörün her iki tarafına da değerler ekler

a + b 30 verir
-

Subtraction - Sağ el operandını sol el operandından çıkarır

a - b, −10 verir
*

Multiplication - Operatörün her iki tarafındaki değerleri çarpar

a * b 200 verir
/

Division - Sol el işleneni sağ el işlenene böler

b / a 2 verecek
%

Modulus - Sol el işleneni sağ el işlenene böler ve kalanı döndürür

b% a 0 verir
? :

Bincond- Boolean operatörlerini değerlendirir. Aşağıda gösterildiği gibi üç işlenen vardır.

değişken x = (ifade)? value1 doğruysa :value2 eğer yanlışsa .

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

a = 1 ise b'nin değeri 20'dir.

a! = 1 ise b'nin değeri 30'dur.

DURUM

NE ZAMAN

SONRA

BAŞKA SON

Case - Vaka operatörü, iç içe yerleştirilmiş bin saniye operatörüne eşdeğerdir.

DURUM f2% 2

NE ZAMAN 0 SONRA 'çift'

NE ZAMAN 1 SONRA "tuhaf"

SON

Domuz Latin - Karşılaştırma Operatörleri

Aşağıdaki tablo Pig Latince'nin karşılaştırma operatörlerini açıklamaktadır.

Şebeke Açıklama Misal
==

Equal- İki işlenenin değerlerinin eşit olup olmadığını kontrol eder; evet ise, o zaman durum gerçek olur.

(a = b) doğru değil
! =

Not Equal- İki işlenenin değerlerinin eşit olup olmadığını kontrol eder. Değerler eşit değilse, koşul doğru olur.

(a! = b) doğrudur.
>

Greater than- Sol işlenenin değerinin sağ işlenenin değerinden büyük olup olmadığını kontrol eder. Evet ise, durum gerçek olur.

(a> b) doğru değil.
<

Less than- Sol işlenenin değerinin sağ işlenenin değerinden küçük olup olmadığını kontrol eder. Evet ise, durum gerçek olur.

(a <b) doğrudur.
> =

Greater than or equal to- Sol işlenenin değerinin sağ işlenenin değerinden büyük veya ona eşit olup olmadığını kontrol eder. Evet ise, durum gerçek olur.

(a> = b) doğru değil.
<=

Less than or equal to- Soldaki işlenenin değerinin sağ işlenenin değerinden küçük veya ona eşit olup olmadığını kontrol eder. Evet ise, durum gerçek olur.

(a <= b) doğrudur.
maçlar

Pattern matching - Sol taraftaki dizenin sağ taraftaki sabitle eşleşip eşleşmediğini kontrol eder.

f1, '. * tutorial. *' ile eşleşir

Pig Latin - Tipi İnşaat Operatörleri

Aşağıdaki tablo, Pig Latince'nin Tip yapım operatörlerini açıklamaktadır.

Şebeke Açıklama Misal
()

Tuple constructor operator - Bu operatör, bir demet oluşturmak için kullanılır.

(Raju, 30)
{}

Bag constructor operator - Bu operatör, bir çanta yapmak için kullanılır.

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

Map constructor operator - Bu operatör, bir demet oluşturmak için kullanılır.

[isim # Raja, 30 yaşında]

Domuz Latin - İlişkisel İşlemler

Aşağıdaki tablo Pig Latince'nin ilişkisel operatörlerini açıklamaktadır.

Şebeke Açıklama
Loading and Storing
YÜK Dosya sisteminden (yerel / HDFS) verileri bir ilişkiye yüklemek için.
MAĞAZA Dosya sistemiyle (yerel / HDFS) bir ilişki kaydetmek için.
Filtreleme
FİLTRE Bir ilişkiden istenmeyen satırları kaldırmak için.
DISTINCT Bir ilişkiden yinelenen satırları kaldırmak için.
ÖNCEKİ, OLUŞTUR Veri sütunlarına dayalı veri dönüşümleri oluşturmak için.
AKIŞ Bir ilişkiyi harici bir program kullanarak dönüştürmek için.
Gruplama ve Birleştirme
KATILMAK İki veya daha fazla ilişkiye katılmak için.
COGROUP Verileri iki veya daha fazla ilişkide gruplamak için.
GRUP Verileri tek bir ilişkide gruplamak için.
ÇAPRAZ İki veya daha fazla ilişkinin çapraz çarpımını oluşturmak için.
Sıralama
SİPARİŞ Bir ilişkiyi bir veya daha fazla alana (artan veya azalan) göre sıralanmış bir düzende düzenlemek için.
SINIR Bir ilişkiden sınırlı sayıda tuple almak için.
Birleştirme ve Bölme
BİRLİK İki veya daha fazla ilişkiyi tek bir ilişkide birleştirmek.
BÖLÜNMÜŞ Tek bir ilişkiyi iki veya daha fazla ilişkiye bölmek.
Teşhis Operatörleri
DÖKÜM Konsolda bir ilişkinin içeriğini yazdırmak için.
TANIMLAMAK Bir ilişkinin şemasını tanımlamak için.
AÇIKLAMAK Bir ilişkiyi hesaplamak için mantıksal, fiziksel veya MapReduce yürütme planlarını görüntülemek için.
GÖZÜNDE CANLANDIRMAK Bir dizi ifadenin adım adım yürütülmesini görüntülemek için.

Genel olarak Apache Pig, Hadoop'un üzerinde çalışır. İçinde bulunan büyük veri kümelerini analiz eden analitik bir araçtır.Halışmak File System. Apache Pig kullanarak verileri analiz etmek için, önce verileri Apache Pig'e yüklememiz gerekir. Bu bölümde verilerin HDFS'den Apache Pig'e nasıl yükleneceği açıklanmaktadır.

HDFS hazırlama

MapReduce modunda Pig, verileri HDFS'den okur (yükler) ve sonuçları HDFS'ye geri depolar. Bu nedenle, HDFS'yi başlatalım ve aşağıdaki örnek verileri HDFS'de oluşturalım.

Öğrenci Kimliği İsim Soyadı Telefon Kent
001 Rajiv Reddy 9848022337 Haydarabad
002 Siddarth Battacharya 9848022338 Kalküta
003 Rajesh Khanna 9848022339 Delhi
004 Preethi Agarwal 9848022330 Pune
005 Trupthi Mohanthy 9848022336 Bhuwaneshwar
006 Archana Mishra 9848022335 Chennai

Yukarıdaki veri seti, altı öğrencinin kimliği, adı, soyadı, telefon numarası ve şehri gibi kişisel ayrıntıları içerir.

1. Adım: Hadoop'u doğrulama

Öncelikle, aşağıda gösterildiği gibi, Hadoop sürüm komutunu kullanarak kurulumu doğrulayın.

$ hadoop version

Sisteminiz Hadoop içeriyorsa ve PATH değişkenini ayarladıysanız, aşağıdaki çıktıyı alırsınız -

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

Adım 2: HDFS'yi Başlatma

Göz atın sbin Hadoop dizini ve başlangıç yarn ve Hadoop dfs (dağıtılmış dosya sistemi) aşağıda gösterildiği gibi.

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

3. Adım: HDFS'de Dizin Oluşturun

Hadoop DFS'de şu komutu kullanarak dizinler oluşturabilirsiniz. mkdir. HDFS'de adla yeni bir dizin oluşturunPig_Data aşağıda gösterildiği gibi gerekli yolda.

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

Adım 4: Verileri HDFS'ye yerleştirme

Pig'in girdi dosyası her bir tuple / kaydı ayrı satırlarda içerir. Ve kaydın varlıkları bir sınırlayıcıyla ayrılır (Örneğimizde kullandık“,”).

Yerel dosya sisteminde bir girdi dosyası oluşturun student_data.txt aşağıda gösterilen verileri içeren.

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.

Şimdi, dosyayı yerel dosya sisteminden HDFS'ye taşıyın. putkomutu aşağıda gösterildiği gibi. (KullanabilirsinizcopyFromLocal komut da.)

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

Dosyayı doğrulama

Kullanabilirsiniz cat aşağıda gösterildiği gibi dosyanın HDFS'ye taşınmış olup olmadığını doğrulamak için komut.

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

Çıktı

Dosyanın içeriğini aşağıda gösterildiği gibi görebilirsiniz.

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

Yük Operatörü

Dosya sisteminden (HDFS / Yerel) Apache Pig'e veri yükleyebilirsiniz. LOAD operatörü Pig Latin.

Sözdizimi

Yük ifadesi, "=" operatörüne bölünen iki bölümden oluşur. Sol tarafta, ilişkinin adını belirtmemiz gerekiyorwhere verileri saklamak istiyoruz ve sağ tarafta, howverileri saklıyoruz. Aşağıda verilen sözdizimiLoad Şebeke.

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

Nerede,

  • relation_name - Verileri saklamak istediğimiz ilişkiden bahsetmeliyiz.

  • Input file path- Dosyanın saklandığı HDFS dizininden bahsetmemiz gerekiyor. (MapReduce modunda)

  • function - Apache Pig tarafından sağlanan yükleme işlevleri kümesinden bir işlev seçmeliyiz (BinStorage, JsonLoader, PigStorage, TextLoader).

  • Schema- Verilerin şemasını tanımlamalıyız. Gerekli şemayı şu şekilde tanımlayabiliriz -

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

Note- Şema belirtmeden verileri yüklüyoruz. Bu durumda, sütunlar 01 $, 02 $ vb. Olarak ele alınacaktır. (Kontrol edin).

Misal

Örnek olarak, verileri şuraya yükleyelim: student_data.txt Pig adlı şema altında Student kullanmak LOAD komut.

Pig Grunt Shell'i başlatın

Öncelikle Linux terminalini açın. Pig Grunt kabuğunu aşağıda gösterildiği gibi MapReduce modunda başlatın.

$ Pig –x mapreduce

Pig Grunt kabuğunu aşağıda gösterildiği gibi başlatacaktır.

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>

Yük İfadesini Yürüt

Şimdi verileri dosyadan yükleyin student_data.txt Grunt kabuğunda aşağıdaki Pig Latince ifadesini yürüterek Pig'e aktarın.

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

Yukarıdaki ifadenin açıklaması aşağıdadır.

İlişki adı Verileri şemada sakladık student.
Dosya yolunu girin Dosyadan veri okuyoruz student_data.txt, HDFS'nin / pig_data / dizininde bulunan.
Depolama işlevi Kullandık PigStorage()işlevi. Verileri yapılandırılmış metin dosyaları olarak yükler ve depolar. Parametre olarak, bir başlığın her bir öğesinin ayrıldığı bir sınırlayıcı alır. Varsayılan olarak, parametre olarak '\ t' alır.
şema

Verileri aşağıdaki şemayı kullanarak sakladık.

sütun İD İsim Soyadı telefon Kent
veri tipi int karakter dizisi karakter dizisi karakter dizisi karakter dizisi

Note - loadifadesi, verileri Pig'de belirtilen ilişkiye yükleyecektir. Yürütmeyi doğrulamak içinLoad ifadesi, kullanmanız gerekir Diagnostic Operators sonraki bölümlerde tartışılacaktır.

Önceki bölümde, verilerin Apache Pig'e nasıl yükleneceğini öğrendik. Yüklenen verileri dosya sisteminde saklayabilirsiniz.storeŞebeke. Bu bölüm, verilerin Apache Pig'de nasıl saklanacağını açıklar.Store Şebeke.

Sözdizimi

Aşağıda, Mağaza bildiriminin sözdizimi verilmiştir.

STORE Relation_name INTO ' required_directory_path ' [USING function];

Misal

Bir dosyamız olduğunu varsayalım student_data.txt aşağıdaki içeriğe sahip HDFS'de.

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.

Ve onu bir ilişkiye okuduk student LOAD operatörünü aşağıda gösterildiği gibi kullanarak.

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

Şimdi ilişkiyi HDFS dizininde saklayalım “/pig_Output/” Aşağıda gösterildiği gibi.

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

Çıktı

Çalıştırdıktan sonra storeifadesi, aşağıdaki çıktıyı alacaksınız. Belirtilen adla bir dizin oluşturulur ve veriler bu dizinde depolanır.

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!

Doğrulama

Depolanan verileri aşağıda gösterildiği gibi doğrulayabilirsiniz.

Aşama 1

Her şeyden önce, adlı dizindeki dosyaları listeleyin pig_output kullanmak ls komutu aşağıda gösterildiği gibi.

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

Çalıştırdıktan sonra iki dosyanın oluşturulduğunu görebilirsiniz. store Beyan.

Adım 2

Kullanma cat komut, adlı dosyanın içeriğini listeleyin part-m-00000 Aşağıda gösterildiği gibi.

$ 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

loadifadesi basitçe verileri Apache Pig'de belirtilen ilişkiye yükleyecektir. Yürütmeyi doğrulamak içinLoad ifadesi, kullanmanız gerekir Diagnostic Operators. Pig Latin, dört farklı tipte teşhis operatörü sağlar -

  • Döküm operatörü
  • Operatörü tanımlayın
  • Açıklama operatörü
  • İllüstrasyon operatörü

Bu bölümde, Domuz Latince'nin Dump operatörlerini tartışacağız.

Döküm Operatörü

DumpOperatör, Pig Latin ifadelerini çalıştırmak ve sonuçları ekranda görüntülemek için kullanılır. Genellikle hata ayıklama Amacı için kullanılır.

Sözdizimi

Aşağıda verilen sözdizimi Dump Şebeke.

grunt> Dump Relation_Name

Misal

Bir dosyamız olduğunu varsayalım student_data.txt aşağıdaki içeriğe sahip HDFS'de.

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.

Ve onu bir ilişkiye okuduk student LOAD operatörünü aşağıda gösterildiği gibi kullanarak.

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

Şimdi, ilişkinin içeriğini kullanarak Dump operator Aşağıda gösterildiği gibi.

grunt> Dump student

Yukarıdakileri uyguladıktan sonra Pig Latinifadesi, HDFS'den veri okumak için bir MapReduce işi başlatacaktır. Aşağıdaki çıktıyı üretecektir.

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)

describe operatör, bir ilişkinin şemasını görüntülemek için kullanılır.

Sözdizimi

Sözdizimi describe operatör aşağıdaki gibidir -

grunt> Describe Relation_name

Misal

Bir dosyamız olduğunu varsayalım student_data.txt aşağıdaki içeriğe sahip HDFS'de.

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.

Ve onu bir ilişkiye okuduk student LOAD operatörünü aşağıda gösterildiği gibi kullanarak.

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

Şimdi isimli ilişkiyi tanımlayalım student ve şemayı aşağıda gösterildiği gibi doğrulayın.

grunt> describe student;

Çıktı

Yukarıdakileri uyguladıktan sonra Pig Latin ifadesi aşağıdaki çıktıyı üretecektir.

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

explain operatörü, bir ilişkinin mantıksal, fiziksel ve MapReduce yürütme planlarını görüntülemek için kullanılır.

Sözdizimi

Aşağıda verilen sözdizimi explain Şebeke.

grunt> explain Relation_name;

Misal

Bir dosyamız olduğunu varsayalım student_data.txt aşağıdaki içeriğe sahip HDFS'de.

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.

Ve onu bir ilişkiye okuduk student LOAD operatörünü aşağıda gösterildiği gibi kullanarak.

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

Şimdi, öğrenci adlı ilişkiyi kullanarak açıklayalım. explain Operatör aşağıda gösterildiği gibi.

grunt> explain student;

Çıktı

Aşağıdaki çıktıyı üretecektir.

$ 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
 ----------------

illustrate operatörü size bir dizi ifadenin adım adım çalıştırılmasını sağlar.

Sözdizimi

Aşağıda verilen sözdizimi illustrate Şebeke.

grunt> illustrate Relation_name;

Misal

Bir dosyamız olduğunu varsayalım student_data.txt aşağıdaki içeriğe sahip HDFS'de.

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.

Ve onu bir ilişkiye okuduk student LOAD operatörünü aşağıda gösterildiği gibi kullanarak.

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

Şimdi, öğrenci isimli ilişkiyi aşağıda gösterildiği gibi gösterelim.

grunt> illustrate student;

Çıktı

Yukarıdaki ifadeyi çalıştırdığınızda, aşağıdaki çıktıyı alacaksınız.

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        |
---------------------------------------------------------------------------------------------

GROUPoperatörü, verileri bir veya daha fazla ilişkide gruplamak için kullanılır. Aynı anahtara sahip verileri toplar.

Sözdizimi

Aşağıda verilen sözdizimi group Şebeke.

grunt> Group_data = GROUP Relation_name BY age;

Misal

Adında bir dosyamız olduğunu varsayalım student_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.

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

Ve bu dosyayı Apache Pig'e ilişki adı ile yükledik. student_details Aşağıda gösterildiği gibi.

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);

Şimdi, ilişkideki kayıtları / tupleleri aşağıda gösterildiği gibi yaşa göre gruplayalım.

grunt> group_data = GROUP student_details by age;

Doğrulama

İlişkiyi doğrulayın group_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grunt> Dump group_data;

Çıktı

Ardından adlı ilişkinin içeriğini görüntüleyen çıktı alacaksınız. group_dataAşağıda gösterildiği gibi. Burada ortaya çıkan şemanın iki sütuna sahip olduğunu gözlemleyebilirsiniz -

  • Biri age, bununla ilişkiyi grupladık.

  • Diğeri bir bagtuple grubunu içeren, ilgili yaş ile öğrenci kayıtları.

(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)})

Kullanarak verileri gruplandırdıktan sonra tablonun şemasını görebilirsiniz. describe komutu aşağıda gösterildiği gibi.

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

Aynı şekilde, şemanın örnek gösterimini kullanarak illustrate komutu aşağıda gösterildiği gibi.

$ Illustrate group_data;

Aşağıdaki çıktıyı üretecektir -

------------------------------------------------------------------------------------------------- 
|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)}| 
-------------------------------------------------------------------------------------------------

Birden Çok Sütuna Göre Gruplama

İlişkiyi aşağıda gösterildiği gibi yaşa ve şehre göre gruplayalım.

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

Adlı ilişkinin içeriğini doğrulayabilirsiniz group_multiple Dump operatörünü aşağıda gösterildiği gibi kullanarak.

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)})

Tümünü Grupla

Bir ilişkiyi aşağıda gösterildiği gibi tüm sütunlara göre gruplayabilirsiniz.

grunt> group_all = GROUP student_details All;

Şimdi, ilişkinin içeriğini doğrulayın group_all Aşağıda gösterildiği gibi.

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)})

COGROUPoperatörü aşağı yukarı GROUP operatörü ile aynı şekilde çalışır . İki operatör arasındaki tek fark,group işleci normalde bir ilişkiyle kullanılırken cogroup operatör, iki veya daha fazla ilişkiyi içeren ifadelerde kullanılır.

Cogroup Kullanarak İki İlişkiyi Gruplama

İki dosyamız olduğunu varsayalım: student_details.txt ve employee_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.

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

Ve bu dosyaları ilişki isimleriyle Pig'e yükledik. student_details ve employee_details sırasıyla, aşağıda gösterildiği gibi.

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);

Şimdi ilişkilerin kayıtlarını / kayıtlarını gruplayalım student_details ve employee_details aşağıda gösterildiği gibi anahtar yaş ile.

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

Doğrulama

İlişkiyi doğrulayın cogroup_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grunt> Dump cogroup_data;

Çıktı

İsimli ilişkinin içeriğini görüntüleyerek aşağıdaki çıktıyı üretecektir. cogroup_data Aşağıda gösterildiği gibi.

(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)})

cogroup operatör, her bir ilişkiden tuple'ları, her grubun belirli bir yaş değerini tasvir ettiği yaşa göre gruplandırır.

Örneğin, sonucun 1. grubunu ele alırsak, 21 yaşına göre gruplandırılır ve iki torba içerir -

  • ilk torba ilk ilişkideki tüm tupleları tutar (student_details bu durumda) 21 yaşında olmak ve

  • ikinci torba, ikinci ilişkiden (employee_details bu durumda) 21 yaşında olmak.

Bir ilişkinin 21 yaş değerine sahip demetleri yoksa boş bir torba döndürür.

JOINoperatörü, iki veya daha fazla ilişkiden kayıtları birleştirmek için kullanılır. Bir birleştirme işlemi gerçekleştirirken, her ilişkiden bir (veya bir grup) tuple (ler) i anahtar olarak ilan ederiz. Bu anahtarlar eşleştiğinde, iki belirli tuple eşleşir, aksi takdirde kayıtlar düşer. Birleştirmeler aşağıdaki türlerde olabilir -

  • Self-join
  • Inner-join
  • Dış birleştirme - sol birleştirme, sağ birleştirme ve tam birleştirme

Bu bölüm örneklerle birleştirme operatörünün Pig Latince'de nasıl kullanılacağını açıklar. İki dosyamız olduğunu varsayalım:customers.txt ve orders.txt içinde /pig_data/ HDFS dizini aşağıda gösterildiği gibi.

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

Ve bu iki dosyayı ilişkilerle birlikte Pig'e yükledik. customers ve orders Aşağıda gösterildiği gibi.

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);

Şimdi bu iki ilişki üzerinde çeşitli Birleştirme işlemleri gerçekleştirelim.

Kendi kendine katıl

Self-join tablo iki ilişkiymiş gibi bir tabloyu kendisiyle birleştirmek için kullanılır, en az bir ilişkiyi geçici olarak yeniden adlandırır.

Genel olarak, Apache Pig'de, kendi kendine birleştirme gerçekleştirmek için, aynı verileri farklı adlar (adlar) altında birçok kez yükleyeceğiz. Bu nedenle dosyanın içeriğini yükleyelimcustomers.txt aşağıda gösterildiği gibi iki tablo olarak.

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);

Sözdizimi

Aşağıda, performans sözdizimi verilmiştir self-join kullanarak operasyon JOIN Şebeke.

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

Misal

Gerçekleştirelim self-join ilişki üzerinde işlem customers, iki ilişkiye katılarak customers1 ve customers2 Aşağıda gösterildiği gibi.

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

Doğrulama

İlişkiyi doğrulayın customers3 kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grunt> Dump customers3;

Çıktı

İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir 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)

İç birleşim

Inner Joinoldukça sık kullanılır; olarak da anılırequijoin. Her iki tabloda da bir eşleşme olduğunda bir iç birleşim satırları döndürür.

Birleştirme yüklemine dayalı olarak iki ilişkinin sütun değerlerini (örneğin A ve B) birleştirerek yeni bir ilişki oluşturur. Sorgu, birleşim koşulunu karşılayan tüm satır çiftlerini bulmak için her A satırını her B satırıyla karşılaştırır. Birleştirme koşulu karşılandığında, eşleşen her A ve B satır çiftinin sütun değerleri bir sonuç satırında birleştirilir.

Sözdizimi

İşte performans söz dizimi inner join kullanarak operasyon JOIN Şebeke.

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

Misal

Gerçekleştirelim inner join iki ilişkide operasyon customers ve orders Aşağıda gösterildiği gibi.

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

Doğrulama

İlişkiyi doğrulayın coustomer_orders kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grunt> Dump coustomer_orders;

Çıktı

Adlı ilişkinin içeriğini alacak aşağıdaki çıktıyı alacaksınız 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 -

Dış Birleştirme : İç birleşimin aksine,outer joinilişkilerden en az birindeki tüm satırları döndürür. Bir dış birleştirme işlemi üç şekilde gerçekleştirilir -

  • Sol dış katılma
  • Sağ dış birleşim
  • Tam dış birleşim

Sol dış katılma

left outer Join işlem, sağ ilişkide eşleşme olmasa bile soldaki tablodaki tüm satırları döndürür.

Sözdizimi

Aşağıda, performans sözdizimi verilmiştir left outer join kullanarak operasyon JOIN Şebeke.

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

Misal

İki ilişki müşterisi ve siparişi üzerinde aşağıda gösterildiği gibi sol dış birleştirme işlemi yapalım.

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

Doğrulama

İlişkiyi doğrulayın outer_left kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grunt> Dump outer_left;

Çıktı

İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir 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,,,,)

Sağ Dış Birleştirme

right outer join işlem, soldaki tabloda eşleşme olmasa bile, sağ tablodaki tüm satırları döndürür.

Sözdizimi

Aşağıda, performans sözdizimi verilmiştir right outer join kullanarak operasyon JOIN Şebeke.

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

Misal

Gerçekleştirelim right outer join iki ilişkide operasyon customers ve orders Aşağıda gösterildiği gibi.

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

Doğrulama

İlişkiyi doğrulayın outer_right kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grunt> Dump outer_right

Çıktı

İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir 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)

Tam Dış Birleştirme

full outer join İşlem, ilişkilerden birinde bir eşleşme olduğunda satır döndürür.

Sözdizimi

Aşağıda, performans sözdizimi verilmiştir full outer join kullanmak JOIN Şebeke.

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

Misal

Gerçekleştirelim full outer join iki ilişkide operasyon customers ve orders Aşağıda gösterildiği gibi.

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

Doğrulama

İlişkiyi doğrulayın outer_full kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grun> Dump outer_full;

Çıktı

İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir 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,,,,)

Çoklu Tuşların Kullanılması

JOIN işlemini birden fazla anahtar kullanarak gerçekleştirebiliriz.

Sözdizimi

Birden çok anahtar kullanarak iki tabloda bir JOIN işlemini nasıl gerçekleştirebileceğiniz aşağıda açıklanmıştır.

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

İki dosyamız olduğunu varsayalım: employee.txt ve employee_contact.txt içinde /pig_data/ HDFS dizini aşağıda gösterildiği gibi.

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

Ve bu iki dosyayı ilişkilerle birlikte Pig'e yükledik. employee ve employee_contact Aşağıda gösterildiği gibi.

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);

Şimdi bu iki ilişkinin içeriğini JOIN Operatör aşağıda gösterildiği gibi.

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

Doğrulama

İlişkiyi doğrulayın emp kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grunt> Dump emp;

Çıktı

İsimli ilişkinin içeriğini görüntüleyerek aşağıdaki çıktıyı üretecektir. emp Aşağıda gösterildiği gibi.

(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)

CROSSoperatör, iki veya daha fazla ilişkinin çapraz çarpımını hesaplar. Bu bölümde çapraz operatörün Pig Latince'de nasıl kullanılacağı örneklerle açıklanmaktadır.

Sözdizimi

Aşağıda verilen sözdizimi CROSS Şebeke.

grunt> Relation3_name = CROSS Relation1_name, Relation2_name;

Misal

İki dosyamız olduğunu varsayalım: customers.txt ve orders.txt içinde /pig_data/ HDFS dizini aşağıda gösterildiği gibi.

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

Ve bu iki dosyayı ilişkilerle birlikte Pig'e yükledik. customers ve orders Aşağıda gösterildiği gibi.

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);

Şimdi bu iki ilişkinin çapraz çarpımını, cross bu iki ilişkide operatör aşağıda gösterildiği gibi.

grunt> cross_data = CROSS customers, orders;

Doğrulama

İlişkiyi doğrulayın cross_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grunt> Dump cross_data;

Çıktı

İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir 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)

UNIONPig Latin operatörü, iki ilişkinin içeriğini birleştirmek için kullanılır. UNION işlemini iki ilişkide gerçekleştirmek için, bunların sütunları ve etki alanları aynı olmalıdır.

Sözdizimi

Aşağıda verilen sözdizimi UNION Şebeke.

grunt> Relation_name3 = UNION Relation_name1, Relation_name2;

Misal

İki dosyamız olduğunu varsayalım: student_data1.txt ve student_data2.txt içinde /pig_data/ HDFS dizini aşağıda gösterildiği gibi.

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.

Ve bu iki dosyayı ilişkilerle birlikte Pig'e yükledik. student1 ve student2 Aşağıda gösterildiği gibi.

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);

Şimdi bu iki ilişkinin içeriğini UNION Operatör aşağıda gösterildiği gibi.

grunt> student = UNION student1, student2;

Doğrulama

İlişkiyi doğrulayın student kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grunt> Dump student;

Çıktı

İlişkinin içeriğini gösteren aşağıdaki çıktıyı gösterecektir. 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)

SPLIT işleci, bir ilişkiyi iki veya daha fazla ilişkiye bölmek için kullanılır.

Sözdizimi

Aşağıda verilen sözdizimi SPLIT Şebeke.

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

Misal

Adında bir dosyamız olduğunu varsayalım student_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.

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

Ve bu dosyayı Pig'e ilişki adıyla yükledik. student_details Aşağıda gösterildiği gibi.

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);

Şimdi ilişkiyi ikiye ayıralım, biri 23 yaşın altındaki çalışanları, diğeriyse 22-25 yaş arası çalışanları listeleyelim.

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

Doğrulama

İlişkileri doğrulayın student_details1 ve student_details2 kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grunt> Dump student_details1;  

grunt> Dump student_details2;

Çıktı

İlişkilerin içeriğini gösteren aşağıdaki çıktıyı üretecektir. student_details1 ve student_details2 sırasıyla.

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)

FILTER işleci, bir koşula bağlı olarak bir ilişkiden gerekli tupleları seçmek için kullanılır.

Sözdizimi

Aşağıda verilen sözdizimi FILTER Şebeke.

grunt> Relation2_name = FILTER Relation1_name BY (condition);

Misal

Adında bir dosyamız olduğunu varsayalım student_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.

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

Ve bu dosyayı Pig'e ilişki adıyla yükledik. student_details Aşağıda gösterildiği gibi.

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);

Şimdi Chennai şehrine mensup öğrencilerin ayrıntılarını almak için Filtre operatörünü kullanalım.

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

Doğrulama

İlişkiyi doğrulayın filter_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grunt> Dump filter_data;

Çıktı

İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir filter_data aşağıdaki gibi.

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

DISTINCT işleci, bir ilişkiden fazlalık (yinelenen) demetleri kaldırmak için kullanılır.

Sözdizimi

Aşağıda verilen sözdizimi DISTINCT Şebeke.

grunt> Relation_name2 = DISTINCT Relatin_name1;

Misal

Adında bir dosyamız olduğunu varsayalım student_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.

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

Ve bu dosyayı Pig'e ilişki adıyla yükledik. student_details Aşağıda gösterildiği gibi.

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);

Şimdi gereksiz (yinelenen) tupleları isimli ilişkiden kaldıralım. student_details kullanmak DISTINCT işleci ve adında başka bir ilişki olarak saklayın distinct_data Aşağıda gösterildiği gibi.

grunt> distinct_data = DISTINCT student_details;

Doğrulama

İlişkiyi doğrulayın distinct_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grunt> Dump distinct_data;

Çıktı

İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir distinct_data aşağıdaki gibi.

(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)

FOREACH işleci, sütun verilerine dayalı olarak belirtilen veri dönüşümlerini oluşturmak için kullanılır.

Sözdizimi

Aşağıda verilen sözdizimi FOREACH Şebeke.

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

Misal

Adında bir dosyamız olduğunu varsayalım student_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.

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

Ve bu dosyayı Pig'e ilişki adıyla yükledik. student_details Aşağıda gösterildiği gibi.

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);

Şimdi her öğrencinin id, yaş ve şehir değerlerini ilişkiden alalım. student_details ve bunu başka bir ilişkide saklayın foreach_data kullanmak foreach Operatör aşağıda gösterildiği gibi.

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

Doğrulama

İlişkiyi doğrulayın foreach_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grunt> Dump foreach_data;

Çıktı

İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir 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)

ORDER BY işleci, bir ilişkinin içeriğini bir veya daha fazla alana göre sıralanmış bir düzende görüntülemek için kullanılır.

Sözdizimi

Aşağıda verilen sözdizimi ORDER BY Şebeke.

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

Misal

Adında bir dosyamız olduğunu varsayalım student_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.

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

Ve bu dosyayı Pig'e ilişki adıyla yükledik. student_details Aşağıda gösterildiği gibi.

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);

Şimdi ilişkiyi öğrencinin yaşına göre azalan bir sırayla sıralayalım ve onu adlı başka bir ilişkide saklayalım. order_by_data kullanmak ORDER BY Operatör aşağıda gösterildiği gibi.

grunt> order_by_data = ORDER student_details BY age DESC;

Doğrulama

İlişkiyi doğrulayın order_by_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grunt> Dump order_by_data;

Çıktı

İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir 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)

LIMIT operatörü, bir ilişkiden sınırlı sayıda tuple almak için kullanılır.

Sözdizimi

Aşağıda verilen sözdizimi LIMIT Şebeke.

grunt> Result = LIMIT Relation_name required number of tuples;

Misal

Adında bir dosyamız olduğunu varsayalım student_details.txt HDFS dizininde /pig_data/ Aşağıda gösterildiği gibi.

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

Ve bu dosyayı Pig'e ilişki adıyla yükledik. student_details Aşağıda gösterildiği gibi.

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);

Şimdi, ilişkiyi öğrencinin yaşına göre azalan sırada sıralayalım ve adını başka bir ilişkide saklayalım. limit_data kullanmak ORDER BY Operatör aşağıda gösterildiği gibi.

grunt> limit_data = LIMIT student_details 4;

Doğrulama

İlişkiyi doğrulayın limit_data kullanmak DUMP Operatör aşağıda gösterildiği gibi.

grunt> Dump limit_data;

Çıktı

İlişkinin içeriğini gösteren aşağıdaki çıktıyı üretecektir limit_data aşağıdaki gibi.

(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 çeşitli yerleşik işlevler sağlar: eval, load, store, math, string, bag ve tuple fonksiyonlar.

Değerlendirme Fonksiyonları

Aşağıda verilenler listesi eval Apache Pig tarafından sağlanan işlevler.

SN İşlev ve Açıklama
1 AVG ()

Bir torba içindeki sayısal değerlerin ortalamasını hesaplamak için.

2 BagToString ()

Bir çantanın öğelerini bir dizeye birleştirmek için. Birleştirirken, bu değerler arasına bir sınırlayıcı yerleştirebiliriz (isteğe bağlı).

3 CONCAT ()

Aynı türden iki veya daha fazla ifadeyi birleştirmek için.

4 MİKTAR()

Bir çantadaki tuple sayısını sayarken bir çantadaki elemanların sayısını elde etmek için.

5 COUNT_STAR ()

Şuna benzer COUNT()işlevi. Bir çantadaki element sayısını elde etmek için kullanılır.

6 FARKLI ()

Bir demetteki iki çantayı (alanı) karşılaştırmak için.

7 Boş()

Bir çantanın veya haritanın boş olup olmadığını kontrol etmek için.

8 MAKS ()

Tek sütunlu bir torbada bir sütunun en yüksek değerini (sayısal değerler veya karakter dizileri) hesaplamak için.

9 MIN ()

Tek sütunlu bir torbada belirli bir sütun için minimum (en düşük) değeri (sayısal veya karakter dizisi) elde etmek için.

10 PluckTuple ()

Domuz Latince Kullanımı PluckTuple() işlev, bir önek dizisi tanımlayabilir ve verilen önek ile başlayan bir ilişkideki sütunları filtreleyebiliriz.

11 BOYUT()

Herhangi bir Pig veri türüne göre eleman sayısını hesaplamak için.

12 ÇIKARMA ()

İki torba çıkarmak için. Giriş olarak iki torba alır ve ikinci torbada olmayan ilk torbanın tuplelerini içeren bir torba döndürür.

13 TOPLA ()

Tek sütunlu bir torbada bir sütunun sayısal değerlerinin toplamını almak için.

14 TOKENİZE ()

Bir dizeyi (bir grup kelime içeren) tek bir demete bölmek ve bölme işleminin çıktısını içeren bir torba döndürmek.

Load ve StoreApache Pig'deki işlevler, verilerin Pig'ten nasıl çıkacağını belirlemek için kullanılır. Bu fonksiyonlar, yükleme ve depolama operatörleri ile kullanılır. Aşağıda, Pig'de bulunan yükleme ve saklama işlevlerinin listesi verilmiştir.

SN İşlev ve Açıklama
1 PigStorage ()

Yapılandırılmış dosyaları yüklemek ve saklamak için.

2 TextLoader ()

Yapılandırılmamış verileri Pig'e yüklemek için.

3 BinStorage ()

Makine tarafından okunabilir formatı kullanarak verileri Pig'e yüklemek ve depolamak için.

4 Sıkıştırma İşlemi

Pig Latin'de sıkıştırılmış verileri yükleyebilir ve depolayabiliriz.

Aşağıda verilen Çanta ve Tuple işlevlerinin listesidir.

SN İşlev ve Açıklama
1 TOBAG ()

İki veya daha fazla ifadeyi torbaya dönüştürmek için.

2 ÜST()

Zirveye ulaşmak için N bir ilişkinin demetleri.

3 TOTUPLE ()

Bir veya daha fazla ifadeyi demete dönüştürmek için.

4 HARİTAYA()

Anahtar / değer çiftlerini bir Haritaya dönüştürmek için.

Apache Pig'de aşağıdaki String işlevlerine sahibiz.

SN Fonksiyonlar ve Açıklama
1 ENDSWITH (dize, testAgainst)

Belirli bir dizenin belirli bir alt dizeyle bitip bitmediğini doğrulamak için.

2 STARTSWITH (dize, alt dize)

İki dize parametresini kabul eder ve ilk dizenin ikinciyle başlayıp başlamadığını doğrular.

3 SUBSTRING (dize, startIndex, stopIndex)

Belirli bir dizeden bir alt dizeyi döndürür.

4 EqualsIgnoreCase (dize1; dize2)

Davayı görmezden gelerek iki sokmayı karşılaştırmak.

5 INDEXOF (dize, 'karakter', startIndex)

Bir dizedeki bir karakterin ilk oluşumunu, bir başlangıç ​​dizininden ileriye doğru arayarak döndürür.

6 LAST_INDEX_OF (ifade)

Bir dizedeki bir karakterin son oluşumunun dizinini, başlangıç ​​dizininden geriye doğru arayarak döndürür.

7 LCFIRST (ifade)

Bir dizedeki ilk karakteri küçük harfe dönüştürür.

8 UCFIRST (ifade)

İlk karakteri büyük harfe dönüştürülmüş bir dize döndürür.

9 UPPER (ifade)

UPPER (ifade) Büyük harfe dönüştürülmüş bir dizge döndürür.

10 LOWER (ifade)

Bir dizedeki tüm karakterleri küçük harfe dönüştürür.

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

Bir dizedeki mevcut karakterleri yeni karakterlerle değiştirmek için.

12 STRSPLIT (dize, normal ifade, sınır)

Bir dizeyi belirli bir düzenli ifadenin eşleşmelerine göre bölmek için.

13 STRSPLITTOBAG (dize, normal ifade, sınır)

Benzer STRSPLIT() işlevi, dizeyi verilen sınırlayıcıya böler ve sonucu bir torba içinde döndürür.

14 TRIM (ifade)

Baştaki ve sondaki boşlukları kaldırılmış bir dizenin bir kopyasını döndürür.

15 LTRIM (ifade)

Baştaki boşlukları kaldırılmış bir dizenin bir kopyasını döndürür.

16 RTRIM (ifade)

Sondaki boşlukları kaldırılmış bir dizenin bir kopyasını döndürür.

Apache Pig aşağıdaki Tarih ve Saat işlevlerini sağlar -

SN Fonksiyonlar ve Açıklama
1 ToDate (milisaniye)

Bu fonksiyon, verilen parametrelere göre bir tarih-saat nesnesi döndürür. Bu işlev için diğer alternatifler ToDate (iosstring), ToDate (userstring, format), ToDate (userstring, format, timezone)

2 Şimdiki zaman()

geçerli zamanın tarih-saat nesnesini döndürür.

3 GetDay (tarih saat)

Tarih-saat nesnesinden bir ayın gününü döndürür.

4 GetHour (tarih saat)

Tarih-saat nesnesinden bir günün saatini döndürür.

5 GetMilliSecond (tarih saat)

Tarih-saat nesnesinden bir saniyenin milisaniyesini döndürür.

6 GetMinute (tarih saat)

Tarih-saat nesnesinden bir saatin dakikasını döndürür.

7 GetMonth (tarih saat)

Tarih-saat nesnesinden bir yılın ayını döndürür.

8 GetSecond (tarih saat)

Tarih-saat nesnesinden bir dakikanın saniyesini döndürür.

9 GetWeek (tarih saat)

Tarih-saat nesnesinden bir yılın haftasını döndürür.

10 GetWeekYear (tarihsaat)

Tarih-saat nesnesinden hafta yılını döndürür.

11 GetYear (tarih saat)

Tarih-saat nesnesinden yılı döndürür.

12 AddDuration (tarih saat, süre)

Süre nesnesiyle birlikte bir tarih-saat nesnesinin sonucunu döndürür.

13 Çıkarma Süresi (tarih saat, süre)

Süre nesnesini Tarih-Saat nesnesinden çıkarır ve sonucu döndürür.

14 DaysBetween (datetime1, datetime2)

İki tarih-saat nesnesi arasındaki gün sayısını döndürür.

15 HoursBetween (datetime1, datetime2)

İki tarih-saat nesnesi arasındaki saat sayısını döndürür.

16 MilliSecondsBetween (datetime1, datetime2)

İki tarih-saat nesnesi arasındaki milisaniye sayısını döndürür.

17 MinutesBetween (datetime1, datetime2)

İki tarih-saat nesnesi arasındaki dakika sayısını döndürür.

18 MonthsBetween (datetime1, datetime2)

İki tarih-saat nesnesi arasındaki ayların sayısını döndürür.

19 SecondsBetween (datetime1, datetime2)

İki tarih-saat nesnesi arasındaki saniye sayısını döndürür.

20 WeeksBetween (datetime1, datetime2)

İki tarih-saat nesnesi arasındaki hafta sayısını döndürür.

21 YearsBetween (datetime1, datetime2)

İki tarih-saat nesnesi arasındaki yılların sayısını döndürür.

Apache Pig'de aşağıdaki Matematik işlevlerine sahibiz -

SN Fonksiyonlar ve Açıklama
1 ABS (ifade)

Bir ifadenin mutlak değerini almak için.

2 ACOS (ifade)

Bir ifadenin ark kosinüsünü elde etmek için.

3 ASIN (ifade)

Bir ifadenin yay sinüsünü elde etmek için.

4 ATAN (ifade)

Bu fonksiyon, bir ifadenin yay tanjantını elde etmek için kullanılır.

5 TCMB (ifade)

Bu işlev, bir ifadenin küp kökünü elde etmek için kullanılır.

6 CEIL (ifade)

Bu fonksiyon, bir ifadenin değerini en yakın tam sayıya yuvarlamak için kullanılır.

7 COS (ifade)

Bu fonksiyon, bir ifadenin trigonometrik kosinüsünü elde etmek için kullanılır.

8 COSH (ifade)

Bu işlev, bir ifadenin hiperbolik kosinüsünü elde etmek için kullanılır.

9 EXP (ifade)

Bu fonksiyon, Euler'in e sayısını x kuvvetine yükseltmek için kullanılır.

10 FLOOR (ifade)

En yakın tam sayıya yuvarlanmış bir ifadenin değerini almak için.

11 LOG (ifade)

Bir ifadenin doğal logaritmasını (e tabanı) elde etmek için.

12 LOG10 (ifade)

Bir ifadenin 10 tabanlı logaritmasını elde etmek için.

13 RASTGELE ()

0.0'a eşit veya 0.0'dan büyük ve 1.0'dan küçük bir rasgele sayı (double yazın) elde etmek için.

14 ROUND (ifade)

Bir tam sayıya yuvarlanmış bir ifadenin değerini (sonuç türü float ise) veya uzun bir sayıya yuvarlanmış (sonuç türü çift ise) almak için.

15 SIN (ifade)

Bir ifadenin sinüsünü elde etmek için.

16 SINH (ifade)

Bir ifadenin hiperbolik sinüsünü elde etmek için.

17 SQRT (ifade)

Bir ifadenin pozitif karekökünü elde etmek için.

18 TAN (ifade)

Bir açının trigonometrik tanjantını elde etmek için.

19 TANH (ifade)

Bir ifadenin hiperbolik tanjantını elde etmek için.

Yerleşik işlevlere ek olarak Apache Pig, aşağıdakiler için kapsamlı destek sağlar: User Dtanımlanmış Fişlevler (UDF'ler). Bu UDF'leri kullanarak kendi işlevlerimizi tanımlayabilir ve kullanabiliriz. UDF desteği Java, Jython, Python, JavaScript, Ruby ve Groovy olmak üzere altı programlama dilinde sağlanmaktadır.

UDF'leri yazmak için tam destek Java'da sağlanır ve kalan tüm dillerde sınırlı destek sağlanır. Java kullanarak, veri yükleme / depolama, sütun dönüştürme ve toplama gibi işlemenin tüm bölümlerini içeren UDF'ler yazabilirsiniz. Apache Pig Java'da yazıldığından, Java dili kullanılarak yazılan UDF'ler diğer dillere kıyasla daha verimli çalışır.

Apache Pig'de ayrıca UDF'ler için bir Java havuzumuz var Piggybank. Piggybank'ı kullanarak, diğer kullanıcılar tarafından yazılmış Java UDF'lerine erişebilir ve kendi UDF'lerimizle katkıda bulunabiliriz.

Java'da UDF Türleri

Java kullanarak UDF'leri yazarken, aşağıdaki üç tür işlevi oluşturabilir ve kullanabiliriz:

  • Filter Functions- Filtre işlevleri, filtre ifadelerinde koşullar olarak kullanılır. Bu işlevler girdi olarak bir Pig değerini kabul eder ve bir Boole değeri döndürür.

  • Eval Functions- Eval fonksiyonları FOREACH-GENERATE deyimlerinde kullanılır. Bu işlevler girdi olarak bir Pig değerini kabul eder ve bir Pig sonucu döndürür.

  • Algebraic Functions- Cebirsel işlevler, ÖNCEKİNDE bildiriminde iç çantalara etki eder. Bu işlevler, iç çantada tam MapReduce işlemlerini gerçekleştirmek için kullanılır.

Java kullanarak UDF'ler yazmak

Java kullanarak bir UDF yazmak için jar dosyasını entegre etmeliyiz Pig-0.15.0.jar. Bu bölümde, Eclipse kullanarak örnek bir UDF'nin nasıl yazılacağını tartışıyoruz. Daha fazla ilerlemeden önce, sisteminize Eclipse ve Maven'ı kurduğunuzdan emin olun.

Bir UDF işlevi yazmak için aşağıdaki adımları izleyin -

  • Eclipse'i açın ve yeni bir proje oluşturun (örneğin myproject).

  • Yeni oluşturulan projeyi bir Maven projesine dönüştürün.

  • Aşağıdaki içeriği pom.xml dosyasına kopyalayın. Bu dosya, Apache Pig ve Hadoop-core jar dosyaları için Maven bağımlılıklarını içerir.

<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>
  • Dosyayı kaydedin ve yenileyin. İçindeMaven Dependencies bölümünde, indirilen jar dosyalarını bulabilirsiniz.

  • Adlı yeni bir sınıf dosyası oluşturun Sample_Eval ve aşağıdaki içeriği içine kopyalayın.

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();  
   } 
}

UDF'leri yazarken, EvalFunc sınıfını miras almak ve uygulama sağlamak zorunludur. exec()işlevi. Bu fonksiyon içerisinde UDF için gerekli olan kod yazılır. Yukarıdaki örnekte, verilen sütunun içeriğini büyük harfe dönüştürmek için kodu döndürdük.

  • Sınıfı hatasız derledikten sonra Sample_Eval.java dosyasına sağ tıklayın. Size bir menü verir. Seçinizexport aşağıdaki ekran görüntüsünde gösterildiği gibi.

  • Tıklandığında export, aşağıdaki pencereyi alacaksınız. TıklamakJAR file.

  • Tıklayarak ilerleyin Next>buton. Jar dosyasını saklamanız gereken yerel dosya sistemine yolu girmeniz gereken başka bir pencere göreceksiniz.

  • Son olarak tıklayın Finishbuton. Belirtilen klasörde bir Jar dosyasısample_udf.jaryaratıldı. Bu jar dosyası, Java ile yazılmış UDF'yi içerir.

UDF'yi kullanma

UDF'yi yazıp Jar dosyasını oluşturduktan sonra, aşağıda verilen adımları izleyin -

1. Adım: Jar dosyasını kaydetme

UDF'yi (Java'da) yazdıktan sonra, Register operatörünü kullanarak UDF'yi içeren Jar dosyasını kaydetmemiz gerekir. Jar dosyasını kaydettirerek, kullanıcılar UDF'nin konumunu Apache Pig'e belirleyebilir.

Syntax

Aşağıda, Register operatörünün sözdizimi verilmiştir.

REGISTER path;

Example

Örnek olarak, bu bölümde daha önce oluşturulmuş sample_udf.jar dosyasını kaydettirelim.

Apache Pig'i yerel modda başlatın ve jar dosyasını sample_udf.jar aşağıda gösterildiği gibi kaydedin.

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

REGISTER '/$PIG_HOME/sample_udf.jar'

Note - /$PIG_HOME/sample_udf.jar yolundaki Jar dosyasını varsayın

Adım 2: Takma Ad Tanımlama

UDF'yi kaydettikten sonra, onu kullanarak bir takma ad tanımlayabiliriz. Define Şebeke.

Syntax

Aşağıda, Define operatörünün sözdizimi verilmiştir.

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

Example

Örnek_değer için takma adı aşağıda gösterildiği gibi tanımlayın.

DEFINE sample_eval sample_eval();

3. Adım: UDF'yi kullanma

Diğer adı tanımladıktan sonra UDF'yi yerleşik işlevlerle aynı şekilde kullanabilirsiniz. HDFS'de emp_data adlı bir dosya olduğunu varsayalım/Pig_Data/ aşağıdaki içeriğe sahip dizin.

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

Ve bu dosyayı aşağıda gösterildiği gibi Pig'e yüklediğimizi varsayalım.

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

Şimdi UDF kullanarak çalışanların isimlerini büyük harfe çevirelim. sample_eval.

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

İlişkinin içeriğini doğrulayın Upper_case Aşağıda gösterildiği gibi.

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

Bu bölümde, Apache Pig komut dosyalarını toplu modda nasıl çalıştıracağımızı göreceğiz.

Domuz Komut Dosyasında Yorumlar

Bir dosyaya komut dosyası yazarken, aşağıda gösterildiği gibi yorumları da ekleyebiliriz.

Çok satırlı yorumlar

Çok satırlı yorumlara '/ *' ile başlayıp, '* /' ile bitireceğiz.

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

Tek satırlı yorumlar

Tek satırlık yorumlara '-' ile başlayacağız.

--we can write single line comments like this.

Toplu Modda Pig Komut Dosyasını Yürütme

Apache Pig deyimlerini toplu modda çalıştırırken, aşağıda verilen adımları izleyin.

Aşama 1

Gerekli tüm Pig Latince ifadeleri tek bir dosyaya yazın. Tüm Pig Latin deyimlerini ve komutlarını tek bir dosyaya yazıp şu şekilde kaydedebiliriz:.pig dosya.

Adım 2

Apache Pig komut dosyasını çalıştırın. Pig komut dosyasını aşağıda gösterildiği gibi kabuktan (Linux) çalıştırabilirsiniz.

Yerel mod MapReduce modu
$ pig -x yerel Sample_script.pig $ domuz -x mapreduce Sample_script.pig

Bunu, aşağıda gösterildiği gibi exec komutunu kullanarak Grunt kabuğundan da çalıştırabilirsiniz.

grunt> exec /sample_script.pig

HDFS'den Pig Komut Dosyası Çalıştırma

Ayrıca HDFS'de bulunan bir Pig betiğini de çalıştırabiliriz. Adında bir Pig komut dosyası olduğunu varsayalımSample_script.pig HDFS dizininde /pig_data/. Aşağıda gösterildiği gibi çalıştırabiliriz.

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

Misal

Bir dosyamız olduğunu varsayalım student_details.txt aşağıdaki içeriğe sahip HDFS'de.

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

Ayrıca adında bir örnek komut dosyamız var. sample_script.pig, aynı HDFS dizininde. Bu dosya, üzerinde işlemleri ve dönüşümleri gerçekleştiren ifadeleri içerir.student ilişki, aşağıda gösterildiği gibi.

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;
  • Komut dosyasının ilk ifadesi, verileri adlı dosyaya yükleyecektir. student_details.txt bir ilişki olarak student.

  • Komut dosyasının ikinci ifadesi, ilişkinin demetlerini yaşa göre azalan sırayla düzenleyecek ve şu şekilde saklayacaktır: student_order.

  • Komut dosyasının üçüncü ifadesi, komut dosyasının ilk 4 demetini saklayacaktır. student_order gibi student_limit.

  • Son olarak dördüncü ifade, ilişkinin içeriğini silecektir student_limit.

Şimdi uygulayalım sample_script.pig Aşağıda gösterildiği gibi.

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

Apache Pig çalıştırılır ve size aşağıdaki içerikle çıktı verir.

(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)