Apache Pig - PluckTuple ()

Después de realizar operaciones como unir para diferenciar las columnas de los dos esquemas, usamos la función PluckTuple(). Para utilizar esta función, en primer lugar, tenemos que definir un prefijo de cadena y tenemos que filtrar por las columnas en una relación que comience con ese prefijo.

Sintaxis

A continuación se muestra la sintaxis de la PluckTuple() función.

DEFINE pluck PluckTuple(expression1) 
DEFINE pluck PluckTuple(expression1,expression3) 
pluck(expression2)

Ejemplo

Supongamos que tenemos dos archivos a saber emp_sales.txt y emp_bonus.txt en el directorio HDFS /pig_data/. losemp_sales.txt contiene los detalles de los empleados del departamento de ventas y el emp_bonus.txt contiene los detalles de los empleados que recibieron la bonificación.

emp_sales.txt

1,Robin,22,25000,sales 
2,BOB,23,30000,sales 
3,Maya,23,25000,sales 
4,Sara,25,40000,sales 
5,David,23,45000,sales 
6,Maggy,22,35000,sales

emp_bonus.txt

1,Robin,22,25000,sales 
2,Jaya,23,20000,admin 
3,Maya,23,25000,sales 
4,Alia,25,50000,admin 
5,David,23,45000,sales
6,Omar,30,30000,admin

Y hemos cargado estos archivos en Pig, con los nombres de las relaciones emp_sales y emp_bonus respectivamente.

grunt> emp_sales = LOAD 'hdfs://localhost:9000/pig_data/emp_sales.txt' USING PigStorage(',')
   as (sno:int, name:chararray, age:int, salary:int, dept:chararray);
	
grunt> emp_bonus = LOAD 'hdfs://localhost:9000/pig_data/emp_bonus.txt' USING PigStorage(',')
   as (sno:int, name:chararray, age:int, salary:int, dept:chararray);

Une estas dos relaciones usando el join operador como se muestra a continuación.

grunt> join_data = join emp_sales by sno, emp_bonus by sno;

Verifica la relación join_data utilizando el Dump operador.

grunt> Dump join_data;
 
(1,Robin,22,25000,sales,1,Robin,22,25000,sales)
(2,BOB,23,30000,sales,2,Jaya,23,20000,admin)
(3,Maya,23,25000,sales,3,Maya,23,25000,sales)
(4,Sara,25,40000,sales,4,Alia,25,50000,admin) 
(5,David,23,45000,sales,5,David,23,45000,sales) 
(6,Maggy,22,35000,sales,6,Omar,30,30000,admin)

Usando la función PluckTuple ()

Ahora, defina la expresión requerida por la cual desea diferenciar las columnas usando PluckTupe() función.

grunt> DEFINE pluck PluckTuple('a::');

Filtrar las columnas en el join_data relación como se muestra a continuación.

grunt> data = foreach join_data generate FLATTEN(pluck(*));

Describe la relación nombrada data Como se muestra abajo.

grunt> Describe data;
 
data: {emp_sales::sno: int, emp_sales::name: chararray, emp_sales::age: int,
   emp_sales::salary: int, emp_sales::dept: chararray, emp_bonus::sno: int,
   emp_bonus::name: chararray, emp_bonus::age: int, emp_bonus::salary: int,
   emp_bonus::dept: chararray}

Dado que hemos definido la expresión como “a::”, las columnas de la emp_sales el esquema se arranca como emp_sales::column name y las columnas del emp_bonus el esquema se arranca como emp_bonus::column name