join apache-pig bigdata

join - Pig Script: Únete a múltiples archivos



apache-pig bigdata (1)

Pig 0.10 introdujo la integración con Bloom Filters http://search-hadoop.com/c/Pig:/src/org/apache/pig/builtin/Bloom.java%7C%7C+%2522done+%2522exec+Tuple%2522

Puede entrenar un filtro de floración en los 3 archivos más pequeños y filtrar un archivo grande, con suerte se obtendrá un archivo más pequeño. Después de eso, realice uniones estándar para obtener una precisión del 100%.

ACTUALIZACIÓN 1 En realidad, necesitaría entrenar 2 filtros Bloom, uno para cada una de las tablas pequeñas, cuando se una a diferentes teclas.

ACTUALIZACIÓN 2 Se mencionó en los comentarios que la unión externa se usa para aumentar los datos. En este caso, los Filtros Bloom pueden no ser lo mejor, son buenos para filtrar y no agregar datos en uniones externas, ya que desea mantener los datos no coincidentes. Un mejor enfoque sería dividir todas las tablas pequeñas en los campos respectivos (f1, f2, f3, f4), almacenar cada partición en un archivo separado lo suficientemente pequeño como para cargar en la memoria. Than Group BY tabla masiva en f1, f2, f3, f4 y en FOREACH pasa el grupo (f1, f2, f3, f4) con la bolsa asociada a la función personalizada escrita en Java, que carga las particiones respectivas de los archivos pequeños en RAM y realiza el aumento.

Estoy leyendo un archivo grande (más de mil millones de registros) y uniéndolo con otros tres archivos, me preguntaba si de todos modos el proceso puede ser más eficiente para evitar lecturas múltiples en la gran tabla. Las tablas pequeñas pueden no encajar en memoria.

A = join smalltable1 by (f1,f2) RIGHT OUTER,massive by (f1,f2) ; B = join smalltable2 by (f3) RIGHT OUTER, A by (f3) ; C = join smalltable3 by (f4) ,B by (f4) ;

La alternativa que estaba pensando es escribir un udf y reemplazar valores en una lectura, pero no estoy seguro si un udf sería eficiente ya que los archivos pequeños no caben en la memoria. La implementación podría ser como:

A = LOAD massive B = generate f1,udfToTranslateF1(f1),f2,udfToTranslateF2(f2),f3,udfToTranslateF3(f3)

Aprecia tus pensamientos ...