Tecnología

Inicio

Cómo construir un índice invertido con MapReduce

Cómo construir un índice invertido con MapReduce


MapReduce es un modelo de programación paralelo desarrollado en Google para grandes conjuntos de datos. Procesa datos en fragmentos en lugar de en orden secuencial. Al hacerlo, se basa en un mapa de funciones de entrada emparejados (claves) y los valores que luego se pone a través de la función de reducir - por lo tanto, su nombre - para hacer que los datos sean más fáciles de entender. En lugar de proporcionar la función de mapa con una clave y un valor, un índice invertido pares de palabras y documentos para buscar texto. Puede utilizar índices invertidos en MapReduce para crear un índice para una búsqueda por palabra clave, por ejemplo.

Instrucciones

1 Escriba el siguiente código para la función de mapa:

InvertedIndexerMapper clase estática pública se extiende MapReduceBase

implements Mapper<LongWritable, Text, Text, Text>

{

private final static Text word = new Text () ;
private final static Text location = new Text () ;

mapa public void (clave LongWritable, texto val,
OutputCollector & lt; texto, texto> salida, el reportero Reporter)
throws IOException
{
FileSplit FileSplit = (FileSplit) reporter.getInputSplit ();
String filename = fileSplit.getPath () .getName ();
location.set (nombre del archivo);

línea de cuerda - val.toString ();
StringTokenizer ITR = new StringTokenizer (line.toLowerCase ());
while (itr.hasMoreTokens ()) {
word.set (itr.nextToken ());
output.collect (palabra, ubicación);
}
}

}

2 Escriba el siguiente código para la función de reducir:

InvertedIndexerReducer clase estática pública se extiende MapReduceBase

implements Reducer<Text, Text, Text, Text>

{

public void reduce(Text key, Iterator<Text> values,
OutputCollector<Text, Text> output,
Reporter reporter) throws IOException
{
boolean first = true;
StringBuilder toReturn = new StringBuilder() ;
while (values.hasNext()) {
if (!first)
toReturn.append(", ") ;
first = false;
toReturn.append(values.next().toString()) ;
}
output.collect(key, new Text(toReturn.toString())) ;
}

}

3 Escriba el siguiente código para completar el índice invertido:

principales argumentos (String []) public static void throws IOException
{

if (args.length < 2) {
System.out
println("Usage: InvertedIndex <input path> <output path>") ;
system.exit(1) ;
}
JobConf conf = new JobConf(InvertedIndex.class) ;
conf.setJobName("InvertedIndex") ;

conf.setOutputKeyClass (Text.class);
conf.setOutputValueClass (Text.class);

conf.setMapperClass (InvertedIndexerMapper.class);
conf.setReducerClass (InvertedIndexerReducer.class);

FileInputFormat.setInputPaths (conf, nuevo camino (args [0]));
FileOutputFormat.setOutputPath (conf, nueva trayectoria (args [1]));
tratar {
JobClient.runJob (conf);
} Catch (Exception e) {
e.pringStackTrace ();
}

}