Pythontr

husonet | Tarih: 20.05.2019

Apache Pig Nedir?

Hadoop HDFS sistemindeki komutların nasıl kullanıldığını örnekleyerek inceleyelim.

Apache Pig, Hadoop üzerinde script tarzı uygulamalar yazabilmemize olanak sağlayan bir ortam olarak tanımlayabiliriz.


Pig Latin, scriptlerimizi oluşturacağımız script dilidir. Ben bu dili biraz linq'e benzetiyorum. Syntax yapısını anahtar kelimelerini aşağıda oluşturmaya çalışalım.



Data Tipleri


TipAçıklamaÖrnek
intSigned 32-bit11
longSigned 64-bit10L or 10l
float32-bit floating point10.5F or 10.5f or 10.5e2f or 10.5E2F
double64-bit floating point10.5 or 10.5e2 or 10.5E2
chararray(string) Unicode UTF-8 formatMerhaba Dünya
bytearrayByte array (blob)  
booleanbooleantrue veya false
datetimedatetime1970-01-01T00:00:00.000+00:00
bigintegerJava BigInteger200000000000
bigdecimalJava BigDecimal33.456783321323441233442
Complex Types
tupleSıralı Küme(19,2)
bagBir dizi koleksiyonu{(19,2), (18,1)}
mapBir anahtar değer çifti kümesi
[open#apache]



load, Hadoop üzerimizde yer alan dosyamızı bir değişkene atamamız için kullanırız syntax yapısı aşağıdaki gibidir.
LOAD 'TableName' AS (ColumnNames)


Örnek
ziyaretciler = LOAD 'ziyaretciler' AS (Protokol, Referrer, Ip, RequestUrl)


filter, şartlar oluşturup verileri süzmek için kullanırız. Sql deki where şartı gibi düşünebilirsiniz, syntax yapısı aşağıdaki gibidir.
FILTER 'TableName' BY
sart1=0 AND sart2=1


Örnek
sart = FILTER ziyaretciler BY
Protokol = 'https' AND Referrer = 'direct'

join, iki veya daha fazla ilişkisel kayıtları birleştirmek için kullanılır. Aynı anahtara sahip verileri eşleştirir.
JOIN FirstTable BY key, SecondTable BY key;


group, çıktılarımızı istediğimiz alanlar üzerinde gruplamamamızı sağlar.
GROUP TableName BY ColumnName;


foreach, kayıtlar üzerinde belirtilen sütunların ayıtlanarak oluşturulması için kullanılır.
FOREACH TableName GENERATE ColumnName1,ColumnName3,ColumnName5;


order by, bir veya daha fazla alanın içeriğini sıralamak için kullanılır.
ORDER TableName BY (ASC|DESC);


limit, sınırlı sayıda kayıt oluşturmak için kullanılır.
LIMIT TableName n;


store, Apache Pig ile oluşturduğumuz verileri depolamak için bu operatörü kullanırız.
STORE Values INTO 'FileName'


Karşılaştırma Operatörleri


OperatörSembolÖrnek
Eşit==FILTER Values BY ColumnName == Val
Eşit Değil!=FILTER Values BY ColumnName != Val
Küçük<FILTER Values BY ColumnName < Val
Büyük>FILTER Values BY ColumnName > Val
Küçük Eşit<=FILTER Values BY ColumnName <= Val
Büyük Eşit>=FILTER Values BY ColumnName >= Val
RegexmatchesFILTER Values BY ColumnName matches '.*text.*'


Mantıksal Operatörler


OperatörSembolÖrnek
ANDandFILTER Values BY ColumnName1 == Val1 AND ColumnName2 == Val2
ORorFILTER Values BY ColumnName1 == Val1 OR ColumnName2 == Val2
NOTnotFILTER Values BY NOT ColumnName1 == Val1


Null Operatörleri


OperatörSembolÖrnek
is nullis nullFILTER Values BY ColumnName1 is null
is not nullis not nullFILTER Values BY ColumnName1 is not null


distinct, bu fonksiyon birden fazla benzer olan kayıtların tekrarlamasını önler, benzer kayıtları tek bir kayıt olarak döndürür.



Apache Pig Fonksiyonlar


  • AVG, Ortalam
  • COUNT, Kayıt Sayısı
  • MIN, Minumum
  • MAX, Maximum
  • SUM, Toplam

Şimdiye kadar öğrendiklerimizi ufak bir örnek ile uygulayalım. Bu örneğimizde ziyaretcilerimizin swarm kelimesi gecen sayfalarımızı, https protokulü üzerinden kaçar defa ziyaret ettikleri IP üzerinden gruplayarak listeleyelim.


ziyaretciBilgileri = LOAD '/pythontr/ziyaretciler.csv' USING PigStorage(',') AS
(
ID : int,
PROTOKOL : chararray,
REFERER : chararray,
IP : chararray,
REQUEST_URL : chararray,
TARIH : datetime,
USER_AGENT : chararray
);
filterZiyaretci = FILTER ziyaretciBilgileri By
PROTOKOL == 'https' AND
REFERER == 'www.pythontr.com' AND
REQUEST_URL matches '.*swarm-hesabi.*';
distinctZiyaretci = DISTINCT filterZiyaretci;
groupZiyaretci = GROUP distinctZiyaretci BY IP;

maxSonZiyaret = FOREACH groupZiyaretci {
Generate
group,
COUNT(distinctZiyaretci.ID);
};

DUMP maxSonZiyaret;