multinodo - Extraer filas que contienen un valor específico usando mapReduce y hadoop
mapreduce java example (1)
Soy nuevo en el desarrollo de la función map-reduce. Considere que tengo un archivo csv que contiene cuatro datos de columna.
Por ejemplo:
101,87,65,67
102,43,45,40
103,23,56,34
104,65,55,40
105,87,96,40
Ahora, quiero extraer decir
40 102
40 104
40 105
como esas filas contienen 40 en la cuarta columna.
Cómo escribir mapa reducir la función?
Básicamente el ejemplo de WordCount se asemeja muy bien a lo que estás tratando de lograr. En lugar de inicializar el conteo por cada palabra, debe tener una condición para verificar si el String tokenizado ha requerido valor y solo en ese caso usted escribe en el contexto. Esto funcionará, ya que Mapper recibirá cada línea del CSV por separado.
Ahora Reducer recibirá la lista de los valores, ya organizados por clave. En Reducer, en lugar de tener IntWritable como tipo de valor de salida, puede usar NullWritable para el tipo de valor devuelto, por lo que su código solo generará las claves. Además, no necesita el ciclo en Reducer, ya que solo desea enviar las claves.
No le proporciono ningún código en mi respuesta, ya que no aprenderá nada de eso. Deja de lado las recomendaciones.
EDITAR: desde que modificó su pregunta con la solicitud de Reducer, aquí hay algunos consejos sobre cómo puede lograr lo que desea.
Una de las posibilidades para lograr el resultado deseado es: en Mapper, después de dividir (o tekenizar) la línea, escribe en la columna de contexto 3 como clave y la columna 0 como valor. Su Reducer, ya que no necesita ningún tipo de agregación, simplemente puede escribir las claves y los valores producidos por Mappers (sí, su código Reducer terminará con una sola línea de código). Puede verificar una de mis respuestas anteriores, la figura allí explica bastante bien qué están haciendo las fases de Asignar y Reducir.