我正在實施兩個相位矩陣乘法。以下是第一階段的減速器。密鑰是來自左側文件的行索引和來自右側文件的列索引。我期望輸出計數映射和減速器是相同的。但它看起來像內循環增加了與外循環相同的迭代器,因此減速器輸出的數量等於鍵的數量。循環兩次在reducer口頭
一段代碼:
@Override
public void reduce(Text key, Iterable<Text> values, Context context)
throws IOException, InterruptedException
{
for (Text outer : values) {
String [] outerLine = outer.toString().split("\t");
//int outerIndex = 0;
//outerIndex = outerLine[0].equalsIgnoreCase(leftFilePattern) ? outerIndex : 1;
if(outerLine[0].equalsIgnoreCase(rightFilePattern))
continue;
double outerValue = Double.parseDouble(outerLine[2]);
for (Text inner : values) {
String [] innerLine = inner.toString().split("\t");
if(innerLine[0].equalsIgnoreCase(leftFilePattern))
continue;
context.write(new Text(key.toString() + "-" + innerLine[1]),
new DoubleWritable(outerValue * Double.parseDouble(innerLine[2])));
}
}
但是,當我有簡單的Java應用程序類似以下內容:
List<Integer> l = Arrays.asList(10, 15);
Iterable<Integer> it = l;
for (Integer in : it) {
for (Integer out : it) {
System.out.println(in + " " + out);
}
}
這裏輸出的數量是4,如果內環作品相同減速機,輸出的情況下,計數應該是1即(10 15)。
有人可以解釋這種行爲。
維沙爾
yeh不同的實現可以自由地實現它不同,但它們應該使用不同的名稱。對不同的行爲使用相同的名稱使得難以使用... – 2013-03-14 01:57:07
@VishalKumar Iterator接口API文檔確實應該指定每個iterator()調用返回一個不同的對象。 – 2013-03-14 02:27:08