2016-05-18 7 views
0

Ich habe einen Java-Code geschrieben, um RowId in Java zu erstellen. Aber ich muss es in mapreduce umwandeln. Ich bin neu bei MapReduce und brauche deine Hilfe.Sequenznummern in mapreduce

Eingang ist eine Datei im lokalen

example: Alex 23 M NY 

Alex 19 M NJ 

Alex 29 M DC 

Michael 20 M NY 

Michael 24 M DC 

Count-Datei als Sekundär-Eingang bietet Beispiel:

Alex 3 

Michael 2 

Desired Output: 
1 Alex 23 M NY 

2 Alex 19 M NJ 

3 Alex 29 M DC 

1 Michael 20 M NY 

2 Michael 24 M DC 

in Java Mein Code ist hier:

public class RowId 
        { 
public static void main(String [] args) throws IOException 
       { 
BufferReader in = null; 
BufferReader cnt = null; 
BufferWriter out = null; 
String in_line; 
String out_line; 
int frst_row_ind=1; 
int row_cnt=0; 
int new_col=0; 

try{ 
in= BufferReader(new FileReader ("file path in local"); 
File out_file = new File("o/p path in local"); 
if(!out_file.exists()){ 
out_file.createNewFile(); 
     } 

FileWriter fw = new FileWriter(out_file); 

out = new BufferWriter(fw); 
while((in_line = in.readLine())! = null) 
{ 

if (in_line!=null) 

{ 
String[] splitData = in_line.split("\\t"); 
cnt = new BufferReader(new FileReader("file path of countFile") 
while((cnt_line=cnt.readLine()) != null) 
{ 
String[] splitCount = cnt_line.split("\\t"); 
if ((splitCount[0]).equalsIgnoreCase(splitData[0])) 
{ 
if (frst_row_ind==1) 
{ 
row_cnt = Integer.parseInt(splitCount[1]); 
} 
new_col++ 
out.write(String.valueOf(new_col)); 
out.write("\\t"); 

for(int i= 0; i <splitData.length; i++) 
{ 
if (!(splitData[i] == null) || (splitData[i].length()== 0)) 
{ 
out.write(splitData[i].trim()); 
if (i!=splitData.length-1) 
{ 
out.write("\\t"); 
} 
} 
} 

row_cnt--; 
out.write("\r\n"); 
if(row_cnt==0) 
{ 
frst_row_ind=1; 
new_col=0; 
} 
else{ 
frst_row_ind=0; 
} 
out.flush(); 
break; 
} 
} 
} 
} 
} 
catch (IOException e) 
{ 
e.printStrackTrace(); 
} 
finally 
{ 
try{ 
if(in!=null) in.close(); 
if(cnt !=null) cnt.close(); 
} 
catch (IOException e) 
{ 
e.printStrackTrace(); 
} 
} 
} 
} 

Bitte revert mit deinen Ideen.

Antwort

0

Unten ist der Code, den Sie y = versuchen können. HINWEIS: Ich habe das selbe nicht ausgeführt, hoffe aber, dass es Ihnen die gewünschte Ausgabe geben wird.

public class StMApper extends Mapper<LongWritable,Text,Text,Text> 
{ 
Text outkey-new Text(); 
Text outvalue=new Text(); 

public void map(LongWritable key,Text values, Context context) 
{ 
    //Alex 19 M NJ 
    String []col=values.toString().split(" "); 
    outkey.set(cols[0]); 
    outvalue.set(values.toString()); 
    context.write(outkey,outvalue); 
} 
} 

public class StReducer extends Reducer<Text,Text,IntWritable,Text> 
{ 
IntWritable outkey=new IntWritable(); 
Text outvalue=new Text(); 
    ////Alex{Alex 19 M NJ , Alex 29 M DC,...} 
public void reduce(Text key,Iterable<Text> values,Context context) 
{ 
    int i=0; 
    for(Text val:values) 
    { 
     outkey.set(i); 
     outvalue.set(val); 
     i++; 
     context.write(outkey,outvalue); 
    } 
} 
} 
+0

Thanx Ishan für Ihre Antwort, Aber Können Sie mir erklären, wie dies zu work.I soll bedeuten, wie ich die Zählung Datei zur Verfügung stellen müssen. und die Haupteingabedatei mit anderen Anmeldeinformationen. – pamel

+0

Pamel, ich sehe keine Rolle der Zähldatei für Ihre gewünschte Ausgabe. Bitte erläutern Sie mir das Gleiche. –

+0

Ja, ich hab dich! Vielen Dank für die Antwort. Es hat mir sehr geholfen. – pamel