ist ich eine CSV-DateiWie Karte nicht wissen, was der Schlüssel
Text habe | Text | Schlüssel | text | text
text | text | Schlüssel | text | text
text | text | Schlüssel | Text | Text
text | text | Schlüssel | text | text
und eine Java-Datei
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reporter;
public class MTransactionPerDay implements Mapper<WritableComparable, Text, Text, Text>{
public void map(WritableComparable key, Text value, OutputCollector<Text, Text> outputCollector, Reporter reporter) throws IOException {
}
Meine Frage ist. Wie kann ich der Kartenmethode mitteilen, dass das dritte Feld der Schlüssel ist?
bearbeiten
Dies löste mein Problem
public void map(WritableComparable key, Text value, OutputCollector<Text, Text> outputCollector, Reporter reporter) throws IOException {
//split string
String[] row = value.toString().split("[|]");
//define key value pairs
Text keyString = new Text(row[3]);
Text valueString = new Text(row[2]);
//result
outputCollector.collect(keyString, valueString);
}
Aber eine andere Frage aufgeworfen. Ich weiß, Map akzeptiert eine Datei und gibt Schlüssel/Wert-Paare zurück. Was ist das für dann WritableComparable Schlüssel?
In der Tat schrieb ich einen Test
@Test
public void testMapReduce() {
System.setProperty("hadoop.home.dir", "C:\\WorkSpace\\");
mapReduceDriver.addInput(new LongWritable(1), new Text("0|9050000001|20160125204123"));
mapReduceDriver.addInput(new LongWritable(1), new Text("0|9050000001|20160125204123"));
mapReduceDriver.addInput(new LongWritable(1), new Text("0|9050000002|20160125204123"));
mapReduceDriver.addOutput(new Text("9050000001"), new IntWritable(2));
mapReduceDriver.addOutput(new Text("9050000002"), new IntWritable(1));
mapReduceDriver.runTest();
}
und musste fügen Sie diese dort
mapReduceDriver.addInput(new LongWritable(1), new Text("0|9050000001|20160125204123"));
selbst dachte ich nie, dass die Schlüssel verwendet.