Apache Pig es una abstracción de MapReduce. Es una herramienta / plataforma para el análisis de grandes conjuntos de datos, y les expresa como un flujo de datos.
Se utiliza un lenguaje de programación latín de cerdo para escribir el guión, y Colmena tienen algunas similitudes. Aquí para hacer algo simple resumen
1, los datos de carga
A = LOAD 'a.txt' AS (col1:chararray, col2:int, col3:int, col4:int, col5:double, col6:double);
Aquí el archivo de texto se carga en un a.txt donde el archivo contiene 6, en donde
2, los datos almacenados
STORE alias INTO 'directory' USING function;
Utilizar los datos de carga de carga de palabras clave en la relación entre el estudiante
student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt'
USING PigStorage(',')
as ( id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray );
Luego se almacena en las relaciones de directorio HDFS "/ pig_Output /" en
STORE student INTO ' hdfs://localhost:9000/pig_Output/ ' USING PigStorage (',');
3, operador de Apache Pig diagnóstico
Load
declaración será simplemente cargar datos en la relación especificada en el cerdo Apache. Para verificar la Load
ejecución de la sentencia, se debe utilizar el Diagnostic
operador. Latín de cerdo proporcionan cuatro tipos diferentes de operador de diagnóstico:
- operador de volcado
- describir operador
- explicación del operador
- Los operadores ilustración
3.1 volcado operadores
de volcado se utiliza principalmente para la depuración, es el resultado directo será impreso a la pantalla.
A = LOAD 'a.txt' AS (col1:chararray, col2:int, col3:int, col4:int, col5:double, col6:double);
DUMP A
DUMP
La salida es una tupla
3.2 Describir los operadores
describe
operadores a modo de vista de las relaciones. colmena similar en la desc
estructura Ver tabla
Describe A
3.3 Explicación de los operadores de
explain
operador se utiliza para mostrar la relación de la MapReduce plan de implementación lógica y física. Del mismo modo en la colmenaexplain
explain A
3.4 operadores Ilustración
ilustran operador prevé la implementación gradual de una serie de declaraciones que casi puede ser interpretado como una barra para ver los resultados.
illustrate Relation_name;
4, el paquete de conexión y
4.1 grupo Operadores de
GROUP
operadores para paquetes de datos en una o más relaciones, que recoge los datos que tienen la misma clave. Cada resultado se emite en forma de tuplas.
-- 按照 age 分组
A = LOAD 'a.txt' AS (age: int, name: chararray, city: chararray);
Group_data = GROUP A BY age;
-- 按照 age 和 city 分组
Group_multiple = GROUP A BY (age, city);
-- 按照所有的列对关系进行分组
Group_all = GROUP A ALL;
group all 输出结果是一个元组 (all ,{(..),(..),...})
4.2 operador Cogroup
COGROUP
trabaja el operador GROUP
operadores de la misma. La única diferencia entre los dos operadores son group
los operadores a menudo se utilizan en una relación, y cogroup
los operadores de las declaraciones que implican dos o más relaciones.
student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
as (id:int, firstname:chararray, lastname:chararray, age:int, phone:chararray, city:chararray);
employee_details = LOAD 'hdfs://localhost:9000/pig_data/employee_details.txt' USING PigStorage(',')
as (id:int, name:chararray, age:int, city:chararray);
cogroup_data = COGROUP student_details by age, employee_details by age;
-- cogroup 有点像hive里的full outer join的感觉,两个文件按照age分组,
-- 如果某个文件里其中一个age的值没有,那么会在结果里用 {} 补齐
4.3 tratan de lograr la diferencia de conjuntos con Cogroup
diferenciación conjunto con una combinación izquierda en general, se dan cuenta de la colmena, donde, por ejemplo TABLE_A y table_b en un solo campo id, pero ahora no quieren saber dónde está el id en table_b en TABLE_A
-- hive 实现
select
a.id
from (
select
id
from table_a
) a
left join (
select
id
from table_b
) b
on a.id=b.id
where b.id is NULL
Mira cómo lograr algunos de los cerdos
A = LOAD 'table_a' USING PigStorage('\t') AS (id: chararray);
B = LOAD 'table_b' USING PigStorage('\t') AS (id: chararray);
C = COGROUP A BY id, B BY id;
D = FILTER(A) IsEmpty(B);
E = FOREACH D GENERATE FLATTEN(A);
E = FOREACH E GENERATE A::id as id;
5, operador de combinación
- Autocombinación
- Unir internamente
- Combinación externa - a la izquierda unirse, se unen a la derecha, y la unión completa
Autocombinación y 5.1 Unión interna
autocombinación y Unión interna sintaxis es la misma, pero autocombinación es su propia asociación, para definir la relación cuando los mismos datos load
a dos relación diferente
Relation3_name = JOIN Relation1_name BY key, Relation2_name BY key ;
5.2 de combinación externa
类比unen于colmena里的izquierda unirse a, unirse a la derecha, externa completa
Unión externa izquierda (conexión externa izquierda)
externa izquierda dejó el operador de combinación devuelve todas las filas en la tabla, incluso si la relación entre el derecho no hay ninguna coincidencia.
La sintaxis es la siguiente:
Relation3_name = JOIN Relation1_name BY id LEFT OUTER, Relation2_name BY customer_id;
Derecho combinación externa (externa derecha)
exterior derecho del operador de combinación devuelve todas las filas de la tabla de la derecha, incluso si no hay una entrada coincidente dejado en la mesa.
La sintaxis es la siguiente:
Relation3_name = JOIN Relation1_name BY id RIGHT, Relation2_name BY customer_id;
Completa combinación externa (conexión externa completa)
cuando existe una coincidencia de una relación, externa completa rendimientos de operación en Aceptar.
La sintaxis es la siguiente:
Relation3_name = JOIN Relation1_name BY id FULL OUTER, Relation2_name BY customer_id;
6, los operadores transversales
CROSS
operador calcula el producto vectorial de dos o más relaciones. En este capítulo se utiliza en el ejemplo muestra cómo el latín de cerdo cross
operador.
Se apreciará para calcular el producto cartesiano
La sintaxis es la siguiente:
cross_data = CROSS customers, orders;
7, operador de unión
cerdo América del UNION
contenido del operador para la relación entre los dos combinados. Para llevar a cabo sobre la relación entre las dos UNION
operaciones, sus columnas y los campos deben ser idénticos.
La sintaxis es la siguiente:
Relation_name3 = UNION Relation_name1, Relation_name2;
8, operadores de división
SPLIT
operador se utiliza para dividir en dos o más relaciones Relación
La sintaxis es la siguiente:
SPLIT Relation_name INTO Relation1_name IF (condition1), Relation2_name (condition2);
9, operadores de filtro
FILTER
operador se utiliza para seleccionar la tupla deseado a partir de la relación de acuerdo con las condiciones.
La sintaxis es la siguiente:
Relation2_name = FILTER Relation1_name BY (condition);
filter_data = FILTER student_details BY city == 'Chennai';
10, distinto operadores
DISTINCT
operador para borrar redundante tupla (duplicado) de la relación.
La sintaxis es la siguiente:
distinct_data = DISTINCT student_details;