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
Tip | Açıklama | Örnek |
int | Signed 32-bit | 11 |
long | Signed 64-bit | 10L or 10l |
float | 32-bit floating point | 10.5F or 10.5f or 10.5e2f or 10.5E2F |
double | 64-bit floating point | 10.5 or 10.5e2 or 10.5E2 |
chararray | (string) Unicode UTF-8 format | Merhaba Dünya |
bytearray | Byte array (blob) | |
boolean | boolean | true veya false |
datetime | datetime | 1970-01-01T00:00:00.000+00:00 |
biginteger | Java BigInteger | 200000000000 |
bigdecimal | Java BigDecimal | 33.456783321323441233442 |
Complex Types | ||
tuple | Sıralı Küme | (19,2) |
bag | Bir dizi koleksiyonu | {(19,2), (18,1)} |
map | Bir anahtar değer çifti kümesi |
|
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ör | Sembol | Ö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 |
Regex | matches | FILTER Values BY ColumnName matches '.*text.*' |
Mantıksal Operatörler
Operatör | Sembol | Örnek |
AND | and | FILTER Values BY ColumnName1 == Val1 AND ColumnName2 == Val2 |
OR | or | FILTER Values BY ColumnName1 == Val1 OR ColumnName2 == Val2 |
NOT | not | FILTER Values BY NOT ColumnName1 == Val1 |
Null Operatörleri
Operatör | Sembol | Örnek |
is null | is null | FILTER Values BY ColumnName1 is null |
is not null | is not null | FILTER 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;