Pig workshop

Sudar Muthu
Sudar MuthuIndependent Consultant
Pig Workshop
         Sudar Muthu
    http://sudarmuthu.com
http://twitter.com/sudarmuthu
   https://github.com/sudar
Who am I?


Research Engineer by profession
I mine useful information from data
You might recognize me from other HasGeek events
Blog at http://sudarmuthu.com
Builds robots as hobby ;)
Special Thanks


HasGeek
What I will not cover?
What I will not cover?


What is BigData, or why it is needed?
What is MapReduce?
What is Hadoop?
Internal architecture of Pig


    http://sudarmuthu.com/blog/getting-started-with-hadoop-and-pig
What we will see today?
What we will see today?


What is Pig
How to use it
  Loading and storing data
  Pig Latin
  SQL vs Pig
  Writing UDF’s
Debugging Pig Scripts
Optimizing Pig Scripts
When to use Pig
So, all of you have Pig installed
             right? ;)
What is Pig?


“Platform for analyzing large
        sets of data”
Components of Pig


Pig Shell (Grunt)
Pig Language (Latin)
Libraries (Piggy Bank)
User Defined Functions (UDF)
Why Pig?


  It is a data flow language
  Provides standard data processing operations
  Insulates Hadoop complexity
  Abstracts Map Reduce
  Increases programmer productivity

… but there are cases where Pig is not suitable.
Pig Modes
For this workshop, we will be
 using Pig only in local mode
Getting to know your Pig shell
pig –x local


Similar to Python’s shell
Different ways of executing Pig
            Scripts


Inline in shell
From a file
Streaming through other executable
Embed script in other languages
Loading and Storing data


Pigs eat anything
Loading Data into Pig


file = LOAD 'data/dropbox-policy.txt' AS (line);

data = LOAD 'data/tweets.csv' USING PigStorage(',');

data = LOAD 'data/tweets.csv' USING PigStorage(',')
AS ('list', 'of', 'fields');
Loading Data into Pig


PigStorage – for most cases
TextLoader – to load text files
JSONLoader – to load JSON files
Custom loaders – You can write your own custom
loaders as well
Viewing Data


DUMP input;



Very useful for debugging, but don’t use it on huge
datasets
Storing Data from Pig


STORE data INTO 'output_location';

STORE data INTO 'output_location' USING PigStorage();

STORE data INTO 'output_location' USING
PigStorage(',');

STORE data INTO 'output_location' USING BinStorage();
Storing Data


Similar to `LOAD`, lot of options are available
Can store locally or in HDFS
You can write your own custom Storage as well
Load and Store example


data = LOAD 'data/data-bag.txt' USING
PigStorage(',');

STORE data INTO 'data/output/load-store' USING
PigStorage('|');



https://github.com/sudar/pig-samples/load-store.pig
Pig Latin
Data Types


Scalar Types
Complex Types
Scalar Types


  int, long – (32, 64 bit) integer
  float, double – (32, 64 bit) floating point
  boolean (true/false)
  chararray (String in UTF-8)
  bytearray (blob) (DataByteArray in Java)

If you don’t specify anything bytearray is used by
default
Complex Types


tuple – ordered set of fields
(data) bag – collection of tuples
map – set of key value pairs
Tuple


 Row with one or more fields
 Fields can be of any data type
 Ordering is important
 Enclosed inside parentheses ()

Eg:
(Sudar, Muthu, Haris, Dinesh)
(Sudar, 176, 80.2F)
Bag


Set of tuples
SQL equivalent is Table
Each tuple can have different set of fields
Can have duplicates
Inner bag uses curly braces {}
Outer bag doesn’t use anything
Bag - Example


Outer bag

(1,2,3)
(1,2,4)
(2,3,4)
(3,4,5)
(4,5,6)

https://github.com/sudar/pig-samples/data-bag.pig
Bag - Example


Inner bag

(1,{(1,2,3),(1,2,4)})
(2,{(2,3,4)})
(3,{(3,4,5)})
(4,{(4,5,6)})

https://github.com/sudar/pig-samples/data-bag.pig
Map


Set of key value pairs
Similar to HashMap in Java
Key must be unique
Key must be of chararray data type
Values can be any type
Key/value is separated by #
Map is enclosed by []
Map - Example


[name#sudar, height#176, weight#80.5F]

[name#(sudar, muthu), height#176, weight#80.5F]

[name#(sudar, muthu), languages#(Java, Pig, Python
)]
Null


Similar to SQL
Denotes that value of data element is unknown
Any data type can be null
Schemas in Load statement


We can specify a schema (collection of datatypes) to `LOAD`
statements

data = LOAD 'data/data-bag.txt' USING PigStorage(',') AS
(f1:int, f2:int, f3:int);

data = LOAD 'data/nested-schema.txt' AS
(f1:int, f2:bag{t:tuple(n1:int, n2:int)}, f3:map[]);
Expressions


Fields can be looked up by

  Position
  Name
  Map Lookup
Expressions - Example


data = LOAD 'data/nested-schema.txt' AS
(f1:int, f2:bag{t:tuple(n1:int, n2:int)}, f3:map[]);

by_pos = FOREACH data GENERATE $0;
DUMP by_pos;

by_field = FOREACH data GENERATE f2;
DUMP by_field;

by_map = FOREACH data GENERATE f3#'name';
DUMP by_map;

https://github.com/sudar/pig-samples/lookup.pig
Operators
Arithmetic Operators


All usual arithmetic operators are supported

  Addition (+)
  Subtraction (-)
  Multiplication (*)
  Division (/)
  Modulo (%)
Boolean Operators


All usual boolean operators are supported

  AND
  OR
  NOT
Comparison Operators


All usual comparison operators are supported

  ==
  !=
  <
  >
  <=
  >=
Relational Operators


FOREACH
FLATTERN
GROUP
FILTER
COUNT
ORDER BY
DISTINCT
LIMIT
JOIN
FOREACH


Generates data transformations based on columns of data

x = FOREACH data GENERATE *;

x = FOREACH data GENERATE $0, $1;

x = FOREACH data GENERATE $0 AS first, $1 AS
second;
FLATTEN


Un-nests tuples and bags. Most of the time results in
cross product

(a, (b, c)) => (a,b,c)

({(a,b),(d,e)}) => (a,b) and (d,e)

(a, {(b,c), (d,e)}) => (a, b, c) and (a, d, e)
GROUP


   Groups data in one or more relations
   Groups tuples that have the same group key
   Similar to SQL group by operator

outerbag = LOAD 'data/data-bag.txt' USING PigStorage(',') AS (f1:int, f2:int, f3:int);
DUMP outerbag;

innerbag = GROUP outerbag BY f1;
DUMP innerbag;

https://github.com/sudar/pig-samples/group-by.pig
FILTER


Selects tuples from a relation based on some condition

data = LOAD 'data/data-bag.txt' USING PigStorage(',') AS
(f1:int, f2:int, f3:int);
DUMP data;

filtered = FILTER data BY f1 == 1;
DUMP filtered;


https://github.com/sudar/pig-samples/filter-by.pig
COUNT


Counts the number of tuples in a relationship

data = LOAD 'data/data-bag.txt' USING PigStorage(',') AS (f1:int, f2:int, f3:int);
grouped = GROUP data BY f2;

counted = FOREACH grouped GENERATE group, COUNT (data);
DUMP counted;


https://github.com/sudar/pig-samples/count.pig
ORDER By


Sort a relation based on one or more fields. Similar to SQL order by

data = LOAD 'data/nested-sample.txt' USING PigStorage(',') AS (f1:int, f2:int, f3:int);
DUMP data;

ordera = ORDER data BY f1 ASC;
DUMP ordera;

orderd = ORDER data BY f1 DESC;
DUMP orderd;


https://github.com/sudar/pig-samples/order-by.pig
DISTINCT


Removes duplicates from a relation

data = LOAD 'data/data-bag.txt' USING PigStorage(',') AS (f1:int, f2:int, f3:int);
DUMP data;

unique = DISTINCT data;
DUMP unique;

https://github.com/sudar/pig-samples/distinct.pig
LIMIT


Limits the number of tuples in the output.

data = LOAD 'data/data-bag.txt' USING PigStorage(',') AS (f1:int, f2:int, f3:int);
DUMP data;

limited = LIMIT data 3;
DUMP limited;


https://github.com/sudar/pig-samples/limit.pig
JOIN


Joins relation based on a field. Both outer and inner
joins are supported

a = LOAD 'data/data-bag.txt' USING PigStorage(',') AS (f1:int, f2:int, f3:int);
DUMP a;

b = LOAD 'data/simple-tuples.txt' USING PigStorage(',') AS (t1:int, t2:int);
DUMP b;

joined = JOIN a by f1, b by t1;
DUMP joined;
https://github.com/sudar/pig-samples/join.pig
SQL vs Pig


From Table – Load file(s)
Select – FOREACH GENERATE
Where – FILTER BY
Group By – GROUP BY + FOREACH GENERATE
Having – FILTER BY
Order By – ORDER BY
Distinct - DISTINCT
Let’s see a complete example


Count the number of words in a
           text file

   https://github.com/sudar/pig-samples/count-words.pig
Extending Pig - UDF
Why UDF?


  Do operations on more than one field
  Do more than grouping and filtering
  Programmer is comfortable
  Want to reuse existing logic

Traditionally UDF can be written only in Java. Now other
languages like Python are also supported
Different types of UDF’s


Eval Functions
Filter functions
Load functions
Store functions
Eval Functions


  Can be used in FOREACH statement
  Most common type of UDF
  Can return simple types or Tuples

b = FOREACH a generate udf.Function($0);

b = FOREACH a generate udf.Function($0, $1);
Eval Functions


Extend EvalFunc<T> interface
The generic <T> should contain the return type
Input comes as a Tuple
Should check for empty and nulls in input
Extend exec() function and it should return the value
Extend getArgToFuncMapping() to let UDF know about
Argument mapping
Extend outputSchema() to let UDF know about output
schema
Using Java UDF in Pig Scripts


Create a jar file which contains your UDF classes
Register the jar at the top of Pig script
Register other jars if needed
Define the UDF function
Use your UDF function
Let’s see an example which
       returns a string
  https://github.com/sudar/pig-samples/strip-quote.pig
Let’s see an example which
       returns a Tuple

  https://github.com/sudar/pig-samples/get-twitter-names.pig
Filter Functions


  Can be used in the Filter statements
  Returns a boolean value



Eg:
vim_tweets = FILTER data By FromVim(StripQuote($6));
Filter Functions


Extends FilterFun, which is a EvalFunc<Boolean>
Should return a boolean
Input it is same as EvalFunc<T>
Should check for empty and nulls in input
Extend getArgToFuncMapping() to let UDF know
about Argument mapping
Let’s see an example which
     returns a Boolean
  https://github.com/sudar/pig-samples/from-vim.pig
Error Handling in UDF


If the error affects only particular row then return
null.
If the error affects other rows, but can recover, then
throw an IOException
If the error affects other rows, and can’t
recover, then also throw an IOException. Pig and
Hadoop will quit, if there are many IOExceptions.
Can we try to write some more
            UDF’s?
Writing UDF in other languages
Streaming
Streaming


Entire data set is passed through an external task
The external task can be in any language
Even shell script also works
Uses the `STREAM` function
Stream through shell script


data = LOAD 'data/tweets.csv' USING PigStorage(',');

filtered = STREAM data THROUGH `cut -f6,8`;

DUMP filtered;



https://github.com/sudar/pig-samples/stream-shell-script.pig
Stream through Python


data = LOAD 'data/tweets.csv' USING PigStorage(',');

filtered = STREAM data THROUGH `strip.py`;

DUMP filtered;


https://github.com/sudar/pig-samples/stream-python.pig
Debugging Pig Scripts


DUMP is your friend, but use with LIMIT
DESCRIBE – will print the schema names
ILLUSTRATE – Will show the structure of the schema
In UDF’s, we can use warn() function. It supports
upto 15 different debug levels
Use Penny -
https://cwiki.apache.org/PIG/pennytoollibrary.html
Optimizing Pig Scripts


Project early and often
Filter early and often
Drop nulls before a join
Prefer DISTINCT over GROUP BY
Use the right data structure
Using Param substitution


 -p key=value - substitutes a single key, value
 -m file.ini – substitutes using an ini file
 default – provide default values

http://sudarmuthu.com/blog/passing-command-line-
arguments-to-pig-scripts
Problems that can be solved using Pig


Anything data related
When not to use Pig?


Lot of custom logic needs to be implemented
Need to do lot of cross lookup
Data is mostly binary (processing image files)
Real-time processing of data is needed
External Libraries


PiggyBank -
https://cwiki.apache.org/PIG/piggybank.html
DataFu – Linked-In Pig Library -
https://github.com/linkedin/datafu
Elephant Bird – Twitter Pig Library -
https://github.com/kevinweil/elephant-bird
Useful Links


  Pig homepage - http://pig.apache.org/
  My blog about Pig -
http://sudarmuthu.com/blog/category/hadoop-pig
  Sample code – https://github.com/sudar/pig-samples
  Slides – http://slideshare.net/sudar
Thank you
1 of 79

Recommended

OOP - Understanding association, aggregation, composition and dependency by
OOP - Understanding association, aggregation, composition and dependencyOOP - Understanding association, aggregation, composition and dependency
OOP - Understanding association, aggregation, composition and dependencyMudasir Qazi
6.2K views20 slides
Introduction to Spark with Python by
Introduction to Spark with PythonIntroduction to Spark with Python
Introduction to Spark with PythonGokhan Atil
5.4K views34 slides
Elasticsearch for beginners by
Elasticsearch for beginnersElasticsearch for beginners
Elasticsearch for beginnersNeil Baker
15.5K views38 slides
Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar... by
Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...
Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...Simplilearn
1.5K views54 slides
Attack monitoring using ElasticSearch Logstash and Kibana by
Attack monitoring using ElasticSearch Logstash and KibanaAttack monitoring using ElasticSearch Logstash and Kibana
Attack monitoring using ElasticSearch Logstash and KibanaPrajal Kulkarni
67.6K views59 slides
Python Class | Python Programming | Python Tutorial | Edureka by
Python Class | Python Programming | Python Tutorial | EdurekaPython Class | Python Programming | Python Tutorial | Edureka
Python Class | Python Programming | Python Tutorial | EdurekaEdureka!
997 views8 slides

More Related Content

What's hot

Cassandra and Spark: Optimizing for Data Locality-(Russell Spitzer, DataStax) by
Cassandra and Spark: Optimizing for Data Locality-(Russell Spitzer, DataStax)Cassandra and Spark: Optimizing for Data Locality-(Russell Spitzer, DataStax)
Cassandra and Spark: Optimizing for Data Locality-(Russell Spitzer, DataStax)Spark Summit
10.3K views33 slides
Learn REST API with Python by
Learn REST API with PythonLearn REST API with Python
Learn REST API with PythonLarry Cai
44.2K views15 slides
PostgreSQL by
PostgreSQLPostgreSQL
PostgreSQLAmazon Web Services
6.4K views30 slides
Static Code Analysis by
Static Code AnalysisStatic Code Analysis
Static Code AnalysisAnnyce Davis
3.4K views53 slides
Python RESTful webservices with Python: Flask and Django solutions by
Python RESTful webservices with Python: Flask and Django solutionsPython RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutionsSolution4Future
72.5K views29 slides
Building an analytics workflow using Apache Airflow by
Building an analytics workflow using Apache AirflowBuilding an analytics workflow using Apache Airflow
Building an analytics workflow using Apache AirflowYohei Onishi
2.3K views22 slides

What's hot(20)

Cassandra and Spark: Optimizing for Data Locality-(Russell Spitzer, DataStax) by Spark Summit
Cassandra and Spark: Optimizing for Data Locality-(Russell Spitzer, DataStax)Cassandra and Spark: Optimizing for Data Locality-(Russell Spitzer, DataStax)
Cassandra and Spark: Optimizing for Data Locality-(Russell Spitzer, DataStax)
Spark Summit10.3K views
Learn REST API with Python by Larry Cai
Learn REST API with PythonLearn REST API with Python
Learn REST API with Python
Larry Cai44.2K views
Static Code Analysis by Annyce Davis
Static Code AnalysisStatic Code Analysis
Static Code Analysis
Annyce Davis3.4K views
Python RESTful webservices with Python: Flask and Django solutions by Solution4Future
Python RESTful webservices with Python: Flask and Django solutionsPython RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutions
Solution4Future72.5K views
Building an analytics workflow using Apache Airflow by Yohei Onishi
Building an analytics workflow using Apache AirflowBuilding an analytics workflow using Apache Airflow
Building an analytics workflow using Apache Airflow
Yohei Onishi2.3K views
Deep Dive into the New Features of Apache Spark 3.1 by Databricks
Deep Dive into the New Features of Apache Spark 3.1Deep Dive into the New Features of Apache Spark 3.1
Deep Dive into the New Features of Apache Spark 3.1
Databricks661 views
Opentracing jaeger by Oracle Korea
Opentracing jaegerOpentracing jaeger
Opentracing jaeger
Oracle Korea2.7K views
Spark Summit EU talk by Ted Malaska by Spark Summit
Spark Summit EU talk by Ted MalaskaSpark Summit EU talk by Ted Malaska
Spark Summit EU talk by Ted Malaska
Spark Summit8.8K views
Big Data Platforms: An Overview by C. Scyphers
Big Data Platforms: An OverviewBig Data Platforms: An Overview
Big Data Platforms: An Overview
C. Scyphers28K views
Application Monitoring using Datadog by Mukta Aphale
Application Monitoring using DatadogApplication Monitoring using Datadog
Application Monitoring using Datadog
Mukta Aphale3.8K views
PostgreSQL Advanced Queries by Nur Hidayat
PostgreSQL Advanced QueriesPostgreSQL Advanced Queries
PostgreSQL Advanced Queries
Nur Hidayat3.6K views
Presto: Optimizing Performance of SQL-on-Anything Engine by DataWorks Summit
Presto: Optimizing Performance of SQL-on-Anything EnginePresto: Optimizing Performance of SQL-on-Anything Engine
Presto: Optimizing Performance of SQL-on-Anything Engine
DataWorks Summit1.8K views
Why TypeScript? by FITC
Why TypeScript?Why TypeScript?
Why TypeScript?
FITC3.9K views
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini... by Edureka!
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
Edureka!489 views
Introduction to Apache Spark Developer Training by Cloudera, Inc.
Introduction to Apache Spark Developer TrainingIntroduction to Apache Spark Developer Training
Introduction to Apache Spark Developer Training
Cloudera, Inc.31.7K views

Similar to Pig workshop

Apache pig by
Apache pigApache pig
Apache pigJigar Parekh
149 views31 slides
AWS Hadoop and PIG and overview by
AWS Hadoop and PIG and overviewAWS Hadoop and PIG and overview
AWS Hadoop and PIG and overviewDan Morrill
4.3K views21 slides
Apache PIG by
Apache PIGApache PIG
Apache PIGPrashant Gupta
1.3K views63 slides
Apache pig power_tools_by_viswanath_gangavaram_r&d_dsg_i_labs by
Apache pig power_tools_by_viswanath_gangavaram_r&d_dsg_i_labsApache pig power_tools_by_viswanath_gangavaram_r&d_dsg_i_labs
Apache pig power_tools_by_viswanath_gangavaram_r&d_dsg_i_labsViswanath Gangavaram
2.6K views32 slides
Practical pig by
Practical pigPractical pig
Practical pigtrihug
12.5K views28 slides
Golang basics for Java developers - Part 1 by
Golang basics for Java developers - Part 1Golang basics for Java developers - Part 1
Golang basics for Java developers - Part 1Robert Stern
1.3K views74 slides

Similar to Pig workshop(20)

AWS Hadoop and PIG and overview by Dan Morrill
AWS Hadoop and PIG and overviewAWS Hadoop and PIG and overview
AWS Hadoop and PIG and overview
Dan Morrill4.3K views
Apache pig power_tools_by_viswanath_gangavaram_r&d_dsg_i_labs by Viswanath Gangavaram
Apache pig power_tools_by_viswanath_gangavaram_r&d_dsg_i_labsApache pig power_tools_by_viswanath_gangavaram_r&d_dsg_i_labs
Apache pig power_tools_by_viswanath_gangavaram_r&d_dsg_i_labs
Practical pig by trihug
Practical pigPractical pig
Practical pig
trihug12.5K views
Golang basics for Java developers - Part 1 by Robert Stern
Golang basics for Java developers - Part 1Golang basics for Java developers - Part 1
Golang basics for Java developers - Part 1
Robert Stern1.3K views
Introduction to Pig & Pig Latin | Big Data Hadoop Spark Tutorial | CloudxLab by CloudxLab
Introduction to Pig & Pig Latin | Big Data Hadoop Spark Tutorial | CloudxLabIntroduction to Pig & Pig Latin | Big Data Hadoop Spark Tutorial | CloudxLab
Introduction to Pig & Pig Latin | Big Data Hadoop Spark Tutorial | CloudxLab
CloudxLab153 views
Pig Introduction to Pig by Chris Wilkes
Pig Introduction to PigPig Introduction to Pig
Pig Introduction to Pig
Chris Wilkes2.3K views
Unit 6 by siddr
Unit 6Unit 6
Unit 6
siddr1.2K views
Pig: Data Analysis Tool in Cloud by Jianfeng Zhang
Pig: Data Analysis Tool in Cloud Pig: Data Analysis Tool in Cloud
Pig: Data Analysis Tool in Cloud
Jianfeng Zhang1.5K views
Introduction to Apache Pig by Jason Shao
Introduction to Apache PigIntroduction to Apache Pig
Introduction to Apache Pig
Jason Shao14.1K views
Apache pig presentation_siddharth_mathur by Siddharth Mathur
Apache pig presentation_siddharth_mathurApache pig presentation_siddharth_mathur
Apache pig presentation_siddharth_mathur
Siddharth Mathur400 views
Apache pig presentation_siddharth_mathur by Siddharth Mathur
Apache pig presentation_siddharth_mathurApache pig presentation_siddharth_mathur
Apache pig presentation_siddharth_mathur
Siddharth Mathur779 views

More from Sudar Muthu

A quick preview of WP CLI - Chennai WordPress Meetup by
A quick preview of WP CLI - Chennai WordPress MeetupA quick preview of WP CLI - Chennai WordPress Meetup
A quick preview of WP CLI - Chennai WordPress MeetupSudar Muthu
1.5K views8 slides
WordPress Developer tools by
WordPress Developer toolsWordPress Developer tools
WordPress Developer toolsSudar Muthu
9.1K views23 slides
WordPress Developer Tools to increase productivity by
WordPress Developer Tools to increase productivityWordPress Developer Tools to increase productivity
WordPress Developer Tools to increase productivitySudar Muthu
2.1K views23 slides
Unit testing for WordPress by
Unit testing for WordPressUnit testing for WordPress
Unit testing for WordPressSudar Muthu
5.2K views27 slides
Unit testing in php by
Unit testing in phpUnit testing in php
Unit testing in phpSudar Muthu
2.1K views19 slides
Using arduino and raspberry pi for internet of things by
Using arduino and raspberry pi for internet of thingsUsing arduino and raspberry pi for internet of things
Using arduino and raspberry pi for internet of thingsSudar Muthu
7.4K views69 slides

More from Sudar Muthu(20)

A quick preview of WP CLI - Chennai WordPress Meetup by Sudar Muthu
A quick preview of WP CLI - Chennai WordPress MeetupA quick preview of WP CLI - Chennai WordPress Meetup
A quick preview of WP CLI - Chennai WordPress Meetup
Sudar Muthu1.5K views
WordPress Developer tools by Sudar Muthu
WordPress Developer toolsWordPress Developer tools
WordPress Developer tools
Sudar Muthu9.1K views
WordPress Developer Tools to increase productivity by Sudar Muthu
WordPress Developer Tools to increase productivityWordPress Developer Tools to increase productivity
WordPress Developer Tools to increase productivity
Sudar Muthu2.1K views
Unit testing for WordPress by Sudar Muthu
Unit testing for WordPressUnit testing for WordPress
Unit testing for WordPress
Sudar Muthu5.2K views
Unit testing in php by Sudar Muthu
Unit testing in phpUnit testing in php
Unit testing in php
Sudar Muthu2.1K views
Using arduino and raspberry pi for internet of things by Sudar Muthu
Using arduino and raspberry pi for internet of thingsUsing arduino and raspberry pi for internet of things
Using arduino and raspberry pi for internet of things
Sudar Muthu7.4K views
How arduino helped me in life by Sudar Muthu
How arduino helped me in lifeHow arduino helped me in life
How arduino helped me in life
Sudar Muthu2.8K views
Having fun with hardware by Sudar Muthu
Having fun with hardwareHaving fun with hardware
Having fun with hardware
Sudar Muthu2.6K views
Getting started with arduino workshop by Sudar Muthu
Getting started with arduino workshopGetting started with arduino workshop
Getting started with arduino workshop
Sudar Muthu3.6K views
Python in raspberry pi by Sudar Muthu
Python in raspberry piPython in raspberry pi
Python in raspberry pi
Sudar Muthu8K views
Hack 101 at IIT Kanpur by Sudar Muthu
Hack 101 at IIT KanpurHack 101 at IIT Kanpur
Hack 101 at IIT Kanpur
Sudar Muthu1.7K views
PureCSS open hack 2013 by Sudar Muthu
PureCSS open hack 2013PureCSS open hack 2013
PureCSS open hack 2013
Sudar Muthu3.7K views
Arduino Robotics workshop day2 by Sudar Muthu
Arduino Robotics workshop day2Arduino Robotics workshop day2
Arduino Robotics workshop day2
Sudar Muthu9.5K views
Arduino Robotics workshop Day1 by Sudar Muthu
Arduino Robotics workshop Day1Arduino Robotics workshop Day1
Arduino Robotics workshop Day1
Sudar Muthu12.8K views
Hands on Hadoop and pig by Sudar Muthu
Hands on Hadoop and pigHands on Hadoop and pig
Hands on Hadoop and pig
Sudar Muthu2.6K views
Lets make robots by Sudar Muthu
Lets make robotsLets make robots
Lets make robots
Sudar Muthu2.7K views
Capabilities of Arduino (including Due) by Sudar Muthu
Capabilities of Arduino (including Due)Capabilities of Arduino (including Due)
Capabilities of Arduino (including Due)
Sudar Muthu2.8K views
Controlling robots using javascript by Sudar Muthu
Controlling robots using javascriptControlling robots using javascript
Controlling robots using javascript
Sudar Muthu7K views
Picture perfect hacks with flickr API by Sudar Muthu
Picture perfect hacks with flickr APIPicture perfect hacks with flickr API
Picture perfect hacks with flickr API
Sudar Muthu2.7K views

Recently uploaded

Attacking IoT Devices from a Web Perspective - Linux Day by
Attacking IoT Devices from a Web Perspective - Linux Day Attacking IoT Devices from a Web Perspective - Linux Day
Attacking IoT Devices from a Web Perspective - Linux Day Simone Onofri
16 views68 slides
Evolving the Network Automation Journey from Python to Platforms by
Evolving the Network Automation Journey from Python to PlatformsEvolving the Network Automation Journey from Python to Platforms
Evolving the Network Automation Journey from Python to PlatformsNetwork Automation Forum
13 views21 slides
Zero to Automated in Under a Year by
Zero to Automated in Under a YearZero to Automated in Under a Year
Zero to Automated in Under a YearNetwork Automation Forum
15 views23 slides
PRODUCT LISTING.pptx by
PRODUCT LISTING.pptxPRODUCT LISTING.pptx
PRODUCT LISTING.pptxangelicacueva6
14 views1 slide
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ... by
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...Jasper Oosterveld
18 views49 slides

Recently uploaded(20)

Attacking IoT Devices from a Web Perspective - Linux Day by Simone Onofri
Attacking IoT Devices from a Web Perspective - Linux Day Attacking IoT Devices from a Web Perspective - Linux Day
Attacking IoT Devices from a Web Perspective - Linux Day
Simone Onofri16 views
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ... by Jasper Oosterveld
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
Serverless computing with Google Cloud (2023-24) by wesley chun
Serverless computing with Google Cloud (2023-24)Serverless computing with Google Cloud (2023-24)
Serverless computing with Google Cloud (2023-24)
wesley chun11 views
Igniting Next Level Productivity with AI-Infused Data Integration Workflows by Safe Software
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Safe Software263 views
Unit 1_Lecture 2_Physical Design of IoT.pdf by StephenTec
Unit 1_Lecture 2_Physical Design of IoT.pdfUnit 1_Lecture 2_Physical Design of IoT.pdf
Unit 1_Lecture 2_Physical Design of IoT.pdf
StephenTec12 views
AMAZON PRODUCT RESEARCH.pdf by JerikkLaureta
AMAZON PRODUCT RESEARCH.pdfAMAZON PRODUCT RESEARCH.pdf
AMAZON PRODUCT RESEARCH.pdf
JerikkLaureta26 views
Empathic Computing: Delivering the Potential of the Metaverse by Mark Billinghurst
Empathic Computing: Delivering  the Potential of the MetaverseEmpathic Computing: Delivering  the Potential of the Metaverse
Empathic Computing: Delivering the Potential of the Metaverse
Mark Billinghurst478 views
SAP Automation Using Bar Code and FIORI.pdf by Virendra Rai, PMP
SAP Automation Using Bar Code and FIORI.pdfSAP Automation Using Bar Code and FIORI.pdf
SAP Automation Using Bar Code and FIORI.pdf
HTTP headers that make your website go faster - devs.gent November 2023 by Thijs Feryn
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023
Thijs Feryn22 views

Pig workshop

  • 1. Pig Workshop Sudar Muthu http://sudarmuthu.com http://twitter.com/sudarmuthu https://github.com/sudar
  • 2. Who am I? Research Engineer by profession I mine useful information from data You might recognize me from other HasGeek events Blog at http://sudarmuthu.com Builds robots as hobby ;)
  • 4. What I will not cover?
  • 5. What I will not cover? What is BigData, or why it is needed? What is MapReduce? What is Hadoop? Internal architecture of Pig http://sudarmuthu.com/blog/getting-started-with-hadoop-and-pig
  • 6. What we will see today?
  • 7. What we will see today? What is Pig How to use it Loading and storing data Pig Latin SQL vs Pig Writing UDF’s Debugging Pig Scripts Optimizing Pig Scripts When to use Pig
  • 8. So, all of you have Pig installed right? ;)
  • 9. What is Pig? “Platform for analyzing large sets of data”
  • 10. Components of Pig Pig Shell (Grunt) Pig Language (Latin) Libraries (Piggy Bank) User Defined Functions (UDF)
  • 11. Why Pig? It is a data flow language Provides standard data processing operations Insulates Hadoop complexity Abstracts Map Reduce Increases programmer productivity … but there are cases where Pig is not suitable.
  • 13. For this workshop, we will be using Pig only in local mode
  • 14. Getting to know your Pig shell
  • 15. pig –x local Similar to Python’s shell
  • 16. Different ways of executing Pig Scripts Inline in shell From a file Streaming through other executable Embed script in other languages
  • 17. Loading and Storing data Pigs eat anything
  • 18. Loading Data into Pig file = LOAD 'data/dropbox-policy.txt' AS (line); data = LOAD 'data/tweets.csv' USING PigStorage(','); data = LOAD 'data/tweets.csv' USING PigStorage(',') AS ('list', 'of', 'fields');
  • 19. Loading Data into Pig PigStorage – for most cases TextLoader – to load text files JSONLoader – to load JSON files Custom loaders – You can write your own custom loaders as well
  • 20. Viewing Data DUMP input; Very useful for debugging, but don’t use it on huge datasets
  • 21. Storing Data from Pig STORE data INTO 'output_location'; STORE data INTO 'output_location' USING PigStorage(); STORE data INTO 'output_location' USING PigStorage(','); STORE data INTO 'output_location' USING BinStorage();
  • 22. Storing Data Similar to `LOAD`, lot of options are available Can store locally or in HDFS You can write your own custom Storage as well
  • 23. Load and Store example data = LOAD 'data/data-bag.txt' USING PigStorage(','); STORE data INTO 'data/output/load-store' USING PigStorage('|'); https://github.com/sudar/pig-samples/load-store.pig
  • 26. Scalar Types int, long – (32, 64 bit) integer float, double – (32, 64 bit) floating point boolean (true/false) chararray (String in UTF-8) bytearray (blob) (DataByteArray in Java) If you don’t specify anything bytearray is used by default
  • 27. Complex Types tuple – ordered set of fields (data) bag – collection of tuples map – set of key value pairs
  • 28. Tuple Row with one or more fields Fields can be of any data type Ordering is important Enclosed inside parentheses () Eg: (Sudar, Muthu, Haris, Dinesh) (Sudar, 176, 80.2F)
  • 29. Bag Set of tuples SQL equivalent is Table Each tuple can have different set of fields Can have duplicates Inner bag uses curly braces {} Outer bag doesn’t use anything
  • 30. Bag - Example Outer bag (1,2,3) (1,2,4) (2,3,4) (3,4,5) (4,5,6) https://github.com/sudar/pig-samples/data-bag.pig
  • 31. Bag - Example Inner bag (1,{(1,2,3),(1,2,4)}) (2,{(2,3,4)}) (3,{(3,4,5)}) (4,{(4,5,6)}) https://github.com/sudar/pig-samples/data-bag.pig
  • 32. Map Set of key value pairs Similar to HashMap in Java Key must be unique Key must be of chararray data type Values can be any type Key/value is separated by # Map is enclosed by []
  • 33. Map - Example [name#sudar, height#176, weight#80.5F] [name#(sudar, muthu), height#176, weight#80.5F] [name#(sudar, muthu), languages#(Java, Pig, Python )]
  • 34. Null Similar to SQL Denotes that value of data element is unknown Any data type can be null
  • 35. Schemas in Load statement We can specify a schema (collection of datatypes) to `LOAD` statements data = LOAD 'data/data-bag.txt' USING PigStorage(',') AS (f1:int, f2:int, f3:int); data = LOAD 'data/nested-schema.txt' AS (f1:int, f2:bag{t:tuple(n1:int, n2:int)}, f3:map[]);
  • 36. Expressions Fields can be looked up by Position Name Map Lookup
  • 37. Expressions - Example data = LOAD 'data/nested-schema.txt' AS (f1:int, f2:bag{t:tuple(n1:int, n2:int)}, f3:map[]); by_pos = FOREACH data GENERATE $0; DUMP by_pos; by_field = FOREACH data GENERATE f2; DUMP by_field; by_map = FOREACH data GENERATE f3#'name'; DUMP by_map; https://github.com/sudar/pig-samples/lookup.pig
  • 39. Arithmetic Operators All usual arithmetic operators are supported Addition (+) Subtraction (-) Multiplication (*) Division (/) Modulo (%)
  • 40. Boolean Operators All usual boolean operators are supported AND OR NOT
  • 41. Comparison Operators All usual comparison operators are supported == != < > <= >=
  • 43. FOREACH Generates data transformations based on columns of data x = FOREACH data GENERATE *; x = FOREACH data GENERATE $0, $1; x = FOREACH data GENERATE $0 AS first, $1 AS second;
  • 44. FLATTEN Un-nests tuples and bags. Most of the time results in cross product (a, (b, c)) => (a,b,c) ({(a,b),(d,e)}) => (a,b) and (d,e) (a, {(b,c), (d,e)}) => (a, b, c) and (a, d, e)
  • 45. GROUP Groups data in one or more relations Groups tuples that have the same group key Similar to SQL group by operator outerbag = LOAD 'data/data-bag.txt' USING PigStorage(',') AS (f1:int, f2:int, f3:int); DUMP outerbag; innerbag = GROUP outerbag BY f1; DUMP innerbag; https://github.com/sudar/pig-samples/group-by.pig
  • 46. FILTER Selects tuples from a relation based on some condition data = LOAD 'data/data-bag.txt' USING PigStorage(',') AS (f1:int, f2:int, f3:int); DUMP data; filtered = FILTER data BY f1 == 1; DUMP filtered; https://github.com/sudar/pig-samples/filter-by.pig
  • 47. COUNT Counts the number of tuples in a relationship data = LOAD 'data/data-bag.txt' USING PigStorage(',') AS (f1:int, f2:int, f3:int); grouped = GROUP data BY f2; counted = FOREACH grouped GENERATE group, COUNT (data); DUMP counted; https://github.com/sudar/pig-samples/count.pig
  • 48. ORDER By Sort a relation based on one or more fields. Similar to SQL order by data = LOAD 'data/nested-sample.txt' USING PigStorage(',') AS (f1:int, f2:int, f3:int); DUMP data; ordera = ORDER data BY f1 ASC; DUMP ordera; orderd = ORDER data BY f1 DESC; DUMP orderd; https://github.com/sudar/pig-samples/order-by.pig
  • 49. DISTINCT Removes duplicates from a relation data = LOAD 'data/data-bag.txt' USING PigStorage(',') AS (f1:int, f2:int, f3:int); DUMP data; unique = DISTINCT data; DUMP unique; https://github.com/sudar/pig-samples/distinct.pig
  • 50. LIMIT Limits the number of tuples in the output. data = LOAD 'data/data-bag.txt' USING PigStorage(',') AS (f1:int, f2:int, f3:int); DUMP data; limited = LIMIT data 3; DUMP limited; https://github.com/sudar/pig-samples/limit.pig
  • 51. JOIN Joins relation based on a field. Both outer and inner joins are supported a = LOAD 'data/data-bag.txt' USING PigStorage(',') AS (f1:int, f2:int, f3:int); DUMP a; b = LOAD 'data/simple-tuples.txt' USING PigStorage(',') AS (t1:int, t2:int); DUMP b; joined = JOIN a by f1, b by t1; DUMP joined; https://github.com/sudar/pig-samples/join.pig
  • 52. SQL vs Pig From Table – Load file(s) Select – FOREACH GENERATE Where – FILTER BY Group By – GROUP BY + FOREACH GENERATE Having – FILTER BY Order By – ORDER BY Distinct - DISTINCT
  • 53. Let’s see a complete example Count the number of words in a text file https://github.com/sudar/pig-samples/count-words.pig
  • 55. Why UDF? Do operations on more than one field Do more than grouping and filtering Programmer is comfortable Want to reuse existing logic Traditionally UDF can be written only in Java. Now other languages like Python are also supported
  • 56. Different types of UDF’s Eval Functions Filter functions Load functions Store functions
  • 57. Eval Functions Can be used in FOREACH statement Most common type of UDF Can return simple types or Tuples b = FOREACH a generate udf.Function($0); b = FOREACH a generate udf.Function($0, $1);
  • 58. Eval Functions Extend EvalFunc<T> interface The generic <T> should contain the return type Input comes as a Tuple Should check for empty and nulls in input Extend exec() function and it should return the value Extend getArgToFuncMapping() to let UDF know about Argument mapping Extend outputSchema() to let UDF know about output schema
  • 59. Using Java UDF in Pig Scripts Create a jar file which contains your UDF classes Register the jar at the top of Pig script Register other jars if needed Define the UDF function Use your UDF function
  • 60. Let’s see an example which returns a string https://github.com/sudar/pig-samples/strip-quote.pig
  • 61. Let’s see an example which returns a Tuple https://github.com/sudar/pig-samples/get-twitter-names.pig
  • 62. Filter Functions Can be used in the Filter statements Returns a boolean value Eg: vim_tweets = FILTER data By FromVim(StripQuote($6));
  • 63. Filter Functions Extends FilterFun, which is a EvalFunc<Boolean> Should return a boolean Input it is same as EvalFunc<T> Should check for empty and nulls in input Extend getArgToFuncMapping() to let UDF know about Argument mapping
  • 64. Let’s see an example which returns a Boolean https://github.com/sudar/pig-samples/from-vim.pig
  • 65. Error Handling in UDF If the error affects only particular row then return null. If the error affects other rows, but can recover, then throw an IOException If the error affects other rows, and can’t recover, then also throw an IOException. Pig and Hadoop will quit, if there are many IOExceptions.
  • 66. Can we try to write some more UDF’s?
  • 67. Writing UDF in other languages
  • 69. Streaming Entire data set is passed through an external task The external task can be in any language Even shell script also works Uses the `STREAM` function
  • 70. Stream through shell script data = LOAD 'data/tweets.csv' USING PigStorage(','); filtered = STREAM data THROUGH `cut -f6,8`; DUMP filtered; https://github.com/sudar/pig-samples/stream-shell-script.pig
  • 71. Stream through Python data = LOAD 'data/tweets.csv' USING PigStorage(','); filtered = STREAM data THROUGH `strip.py`; DUMP filtered; https://github.com/sudar/pig-samples/stream-python.pig
  • 72. Debugging Pig Scripts DUMP is your friend, but use with LIMIT DESCRIBE – will print the schema names ILLUSTRATE – Will show the structure of the schema In UDF’s, we can use warn() function. It supports upto 15 different debug levels Use Penny - https://cwiki.apache.org/PIG/pennytoollibrary.html
  • 73. Optimizing Pig Scripts Project early and often Filter early and often Drop nulls before a join Prefer DISTINCT over GROUP BY Use the right data structure
  • 74. Using Param substitution -p key=value - substitutes a single key, value -m file.ini – substitutes using an ini file default – provide default values http://sudarmuthu.com/blog/passing-command-line- arguments-to-pig-scripts
  • 75. Problems that can be solved using Pig Anything data related
  • 76. When not to use Pig? Lot of custom logic needs to be implemented Need to do lot of cross lookup Data is mostly binary (processing image files) Real-time processing of data is needed
  • 77. External Libraries PiggyBank - https://cwiki.apache.org/PIG/piggybank.html DataFu – Linked-In Pig Library - https://github.com/linkedin/datafu Elephant Bird – Twitter Pig Library - https://github.com/kevinweil/elephant-bird
  • 78. Useful Links Pig homepage - http://pig.apache.org/ My blog about Pig - http://sudarmuthu.com/blog/category/hadoop-pig Sample code – https://github.com/sudar/pig-samples Slides – http://slideshare.net/sudar