📖 Scenario: You work at a small company that collects sales data. You want to use Pig Latin to analyze this data easily.
🎯 Goal: Learn how to load data, filter it, and display results using Pig Latin.
📋 What You'll Learn
Create a relation with sales data
Add a filter condition
Use a foreach statement to select fields
Display the final filtered data
💡 Why This Matters
🌍 Real World
Pig Latin is used to process large datasets in Hadoop environments for data analysis.
💼 Career
Knowing Pig Latin helps in roles like data engineer or big data analyst working with Hadoop.
Progress0 / 4 steps
1
Create the sales data relation
Create a relation called sales with these exact tuples: ("Alice", 300), ("Bob", 150), ("Charlie", 200) using the LOAD statement with PigStorage and schema (name:chararray, amount:int).
Hadoop
Hint
Use LOAD with PigStorage and define the schema with AS.
2
Filter sales greater than 180
Create a relation called big_sales by filtering sales where amount is greater than 180 using the FILTER statement.
Hadoop
Hint
Use FILTER with the condition amount > 180.
3
Select name and amount from filtered data
Create a relation called result using FOREACH on big_sales to generate only the name and amount fields.
Hadoop
Hint
Use FOREACH with GENERATE to select fields.
4
Display the filtered sales data
Use the DUMP statement to display the contents of the result relation.
Hadoop
Hint
Use DUMP result; to see the filtered data.
Practice
(1/5)
1. What is the main purpose of the FILTER statement in Pig Latin?
easy
A. To select rows that meet a condition
B. To combine two datasets
C. To load data from a file
D. To save the results to storage
Solution
Step 1: Understand the role of FILTER
The FILTER statement is used to keep only the rows that satisfy a given condition.
Step 2: Compare with other statements
LOAD reads data, GROUP groups data, STORE saves data, so FILTER is for selecting rows.
Final Answer:
To select rows that meet a condition -> Option A
Quick Check:
FILTER = select rows [OK]
Hint: FILTER keeps rows matching condition, like a sieve [OK]
Common Mistakes:
Confusing FILTER with GROUP
Thinking FILTER saves data
Mixing FILTER with LOAD
2. Which of the following is the correct syntax to load a file named data.txt in Pig Latin?
easy
A. LOAD 'data.txt' USING PigStorage();
B. LOAD data.txt USING PigStorage();
C. LOAD 'data.txt' AS PigStorage();
D. LOAD 'data.txt' USING PigStorage
Solution
Step 1: Check the LOAD syntax
LOAD requires the file path as a string in quotes and the loader function with parentheses.
Step 2: Validate each option
LOAD 'data.txt' USING PigStorage(); uses quotes and parentheses correctly. LOAD data.txt USING PigStorage(); misses quotes. LOAD 'data.txt' AS PigStorage(); uses AS instead of USING. LOAD 'data.txt' USING PigStorage misses parentheses.
Final Answer:
LOAD 'data.txt' USING PigStorage(); -> Option A
Quick Check:
LOAD 'file' USING loader(); [OK]
Hint: LOAD needs quotes and parentheses for loader [OK]
Common Mistakes:
Forgetting quotes around filename
Using AS instead of USING
Omitting parentheses after loader
3. Given the following Pig Latin code:
A = LOAD 'numbers.txt' USING PigStorage(',');
B = FILTER A BY $0 > 10;
C = FOREACH B GENERATE $0;
DUMP C;
What will be the output if numbers.txt contains: 5,abc 15,def 8,ghi 20,jkl
medium
A. (5,abc)
(8,ghi)
B. (5)
(8)
C. (15,def)
(20,jkl)
D. (15)
(20)
Solution
Step 1: Understand the FILTER condition
FILTER keeps rows where first column ($0) is greater than 10, so rows with 15 and 20 remain.
Step 2: Understand FOREACH GENERATE
FOREACH selects only the first column ($0), so output shows only 15 and 20 as single values.
Final Answer:
(15)
(20) -> Option D
Quick Check:
FILTER $0 > 10 then select $0 [OK]
Hint: FILTER then FOREACH select column shows filtered values [OK]
Common Mistakes:
Including second column in output
Selecting rows less than or equal to 10
Confusing FILTER condition
4. Identify the error in this Pig Latin script:
data = LOAD 'input.txt' USING PigStorage(',');
filtered = FILTER data BY $1 == 'USA';
grouped = GROUP filtered BY $2;
result = FOREACH grouped GENERATE group, COUNT(filtered);
STORE result INTO 'output';
medium
A. COUNT should use filtered instead of group
B. STORE command missing USING clause
C. FILTER condition uses wrong column index
D. GROUP should use filtered instead of data
Solution
Step 1: Check STORE syntax
STORE requires a USING clause to specify the storage format, e.g., PigStorage().
Step 2: Verify other statements
GROUP uses filtered correctly, COUNT uses filtered correctly, FILTER condition is valid if $1 is country column.
Final Answer:
STORE command missing USING clause -> Option B
Quick Check:
STORE ... INTO 'path' USING loader() [OK]
Hint: STORE needs USING clause to save data [OK]
Common Mistakes:
Omitting USING in STORE
Confusing GROUP input
Misunderstanding COUNT argument
5. You have a dataset of sales with columns: product_id, region, amount. You want to find total sales per region but only for sales above 100. Which Pig Latin sequence correctly achieves this?
hard
A. A = LOAD 'sales.txt' USING PigStorage(',');
B = FILTER A BY amount > 100;
C = GROUP B BY region;
D = FOREACH C GENERATE group, SUM(B.amount);
STORE D INTO 'result' USING PigStorage();
B. A = LOAD 'sales.txt' USING PigStorage(',');
B = FILTER A BY $2 > 100;
C = GROUP B BY $1;
D = FOREACH C GENERATE group, SUM(B.$2);
STORE D INTO 'result';
C. A = LOAD 'sales.txt' USING PigStorage(',');
B = FILTER A BY $2 > 100;
C = GROUP B BY $1;
D = FOREACH C GENERATE group, SUM(B.$2);
STORE D INTO 'result' USING PigStorage();
D. A = LOAD 'sales.txt' USING PigStorage(',');
B = FILTER A BY $1 > 100;
C = GROUP B BY $2;
D = FOREACH C GENERATE group, SUM(B.$3);
STORE D INTO 'result' USING PigStorage();
Solution
Step 1: Identify correct column indexes
Columns: product_id ($0), region ($1), amount ($2). Filter by amount > 100 means FILTER BY $2 > 100.
Step 2: Group by region and sum amount
Group by $1 (region), then sum B.$2 (amount) in FOREACH. STORE needs USING clause.
Step 3: Check each option
A = LOAD 'sales.txt' USING PigStorage(',');
B = FILTER A BY $2 > 100;
C = GROUP B BY $1;
D = FOREACH C GENERATE group, SUM(B.$2);
STORE D INTO 'result' USING PigStorage(); matches all requirements: correct filter, group, sum, and STORE syntax.
Final Answer:
Option C code sequence -> Option C
Quick Check:
Filter $2>100, group $1, sum $2, STORE with USING [OK]
Hint: Use correct column indexes and STORE with USING [OK]
Common Mistakes:
Using wrong column indexes for filter or group
Omitting USING in STORE
Summing wrong column
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.