hadoop - Mapa ¿Reducir el resultado a CSV o necesito valores clave?
mapreduce hadoop-streaming (2)
Mi función de mapa produce un
Key/tValue
Valor = Lista (valor1, valor2, valor3)
entonces mi función de reducción produce:
Key/tCSV-Line
Ex.
2323232-2322 fdsfs, sdfs, dfsfs, 0,0,0,2, fsda, 3,23,3, s,
2323555-22222 dfasd, sdfas, adfs, 0,0,2,0, fasafa, 2,23, s
Ex. RawData: 232342|@3423@|34343|sfasdfasdF|433443|Sfasfdas|324343
x 1000
De todos modos, quiero eliminar la clave al principio para que mi cliente pueda importar directamente a mysql. Tengo aproximadamente 50 archivos de datos, mi pregunta es después de que los mapee una vez y el reductor comience ¿necesita la clave impresa con el valor o puedo simplemente imprimir el valor?
Más información:
Aquí este código podría arrojar una luz mejor sobre la situación
esto es un poco lo que planeo hacer.
Si no desea emitir la clave, NullWritable
en NullWritable
en su código. Por ejemplo :
public static class TokenCounterReducer extends
Reducer<Text, IntWritable, NullWritable, IntWritable> {
public void reduce(Text key, Iterable<IntWritable> values,
Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable value : values) {
sum += value.get();
}
context.write(NullWritable.get(), new IntWritable(sum));
// context.write(key, new IntWritable(sum));
}
Avíseme si esto no es lo que necesita, actualizaré la respuesta en consecuencia.
Su reductor puede emitir una línea sin / t, o, en su caso, justo a lo que llama el valor. Desafortunadamente, la transmisión de hadoop interpretará esto como una clave con un valor nulo y anexará automáticamente un delimitador (/ t por defecto) al final de cada línea. Puedes cambiar lo que es este delimitador pero, cuando jugué con esto, no pude conseguir que no anexara un delimitador. No recuerdo los detalles exactos, pero en base a esto ( Hadoop: la clave y el valor están separados por tabulaciones en el archivo de salida. ¿Cómo hacerlo separados por punto y coma? ) Creo que la propiedad es mapred.textoutputformat.separator. Mi solución fue tirar el / t al final de cada línea cuando retiré el archivo:
hadoop fs -cat hadoopfile | perl -pe ''s//t$//'' > destfile