私はこのコードを持っています:
public void reduce(Text key, Iterable<Text> values, Context context)
throws IOException, InterruptedException
{
String name = null;
String sid = null;
String predicate = null;
String oid = null;
String id = null;
String outKey = null;
String outVal = null;
LinkedList<Text> valuesList = new LinkedList<Text>();
Iterator<Text> ite = values.iterator();
while(ite.hasNext()) {
Text t = ite.next();
String[] entities = t.toString().split("#-#-#-#");
if(entities[entities.length-1].equalsIgnoreCase("topic_name"))
{
name = entities[0];
}
valuesList.add(t);
}
Iterator<Text> ite2 = valuesList.iterator();
while(ite2.hasNext()) {
Text t2 = ite2.next();
String[] entities = t2.toString().split("#-#-#-#");
if(!entities[entities.length-1].contains("topic_name"))
{
if(name!=null) {
outKey = entities[0]+"\t"+entities[1]+"\t"+name;
}
else
{
outKey = entities[0]+"\t"+entities[1]+"\t"+key.toString();
}
context.write(new Text(outKey), null);
}
}
}
値を再度反復すると、キャッシュされたコピーの最後の値が常に取得されていることがわかります。