2016-05-18 5 views
0

JavaでRowIdを作成するJavaコードを作成しました。しかし、私はそれをmapreduceに変換する必要があります。私はMapReduceが新しく、あなたの助けが必要です。mapreduceのシーケンシャル番号

入力は、二次入力 例として提供

example: Alex 23 M NY 

Alex 19 M NJ 

Alex 29 M DC 

Michael 20 M NY 

Michael 24 M DC 

ローカルカウントファイル内のファイルされる:

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 

Javaで私のコードはここにある:

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(); 
} 
} 
} 
} 

復帰を行ってくださいあなたのアイデアと一緒に。

答えて

0

以下はy =試してみることのできるコードです。注:私は同じを実行していないが、それはあなたに望ましい出力を与えることを望む。あなたの応答のための

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

ありがとうイシャン、 しかし、私はカウントファイルを提供する必要がありますどのようにあなたは私を説明することができ、これはwork.Iになっているかを意味します。他の資格情報を持つメイン入力ファイル – pamel

+0

Pamel、私はあなたの希望する出力のためのカウントファイルの役割を見ていません。私にも同じことを説明してください。 –

+0

ええ、私はあなたを持っています!答えに感謝します。 それは私を非常に助けました。 – pamel