In meiner Mapper-Klasse möchte ich eine kleine Manipulation an einer aus einer Datei gelesenen Zeichenfolge vornehmen (als Zeile) und sie dann an den Reducer senden, um eine Zeichenkette zu erhalten . Die Manipulation ersetzen zu null Strings mit 0. (den aktuellen ersetzen & beitreten Teil meines hadoop Job versagt)String-Verkettung in der Mapper-Klasse eines MapReduce-Programms mit Fehlern
Hier ist mein Code:
import java.io.BufferedReader;
import java.io.IOException;
.....
public class PartNumberMapper extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> {
private static Text partString = new Text("");
private final static IntWritable count = new IntWritable(1);
public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
String line = value.toString();
// Read line by line to bufferreader and output the (line,count) pair
BufferedReader bufReader = new BufferedReader(new StringReader(line));
String l=null;
while((l=bufReader.readLine()) != null)
{
/**** This part is the problem ****/
String a[]=l.split(",");
if(a[1]==""){ // if a[1] i.e. second string is "" then set it to "0"
a[1]="0";
l = StringUtils.join(",", a); // join the string array to form a string
}
/**** problematic part ends ****/
partString.set(l);
output.collect(partString, count);
}
}
}
Danach läuft, nur der Mapper schlägt fehl, und doesn‘ t posten Sie irgendwelche Fehler. [Der Code wird mit Garn] Ich bin mir nicht sicher, was ich falsch mache, der gleiche Code funktioniert ohne den String Join Teil.
Könnte jemand von Ihnen erklären, was mit der Zeichenfolge ersetzen/concat falsch ist? Gibt es einen besseren Weg, es zu tun?
Ich denke, L = StringUtils.join (",", a); ist falsch. Ändern Sie es in l = StringUtils.join (a, ','); – Koushik
Folgendes habe ich angesprochen: ['join (CharSequence separator, String [] strings)'] (https://hadoop.apache.org/docs/r1.2.1/api/org/apache/hadoop/util/ StringUtils.html # join) –
Sind Sie sicher, dass die Größe von Array a [] jedes Mal> = 2 ist? Wenn nicht, fügen Sie einen Scheck hinzu. – Koushik