我有來自兩個源的輸入:在形式多個輸入和分組比較
地圖輸出,形式爲
output.collect(new StockKey(Text(x+" "+id), new Text(id2)), new Text(data));
地圖輸出,
output.collect(new StockKey(new Text(x+" "+id), new Text(1), new Text(data));
作業conf:
conf.setPartitionerClass(CustomPartitioner.class);
conf.setValueGroupingComparatorClass(StockKeyGroupingComparator.class);
其中StockKey是一個自定義類格式(new Text(), new Text())
的;
構造:
public StockKey(){
this.symbol = new Text();
this.timestamp = new Text();
}
分組比較:
public class StockKeyGroupingComparator extends WritableComparator {
protected StockKeyGroupingComparator() {
super(StockKey.class, true);
}
public int compare(WritableComparable w1, WritableComparable w2){
StockKey k1 = (StockKey)w1;
StockKey k2 = (StockKey)w2;
Text x1 = new Text(k1.getSymbol());
Text x2 = new Text(k2.getSymbol());
return x1.compareTo(x2);
}
}
但是
我發現了僅在地圖輸出值達到我沒有從輸入端接收地圖輸出值減速器。我希望將這兩個地圖輸出中常見的符號即new Text(x+" "+id)
的記錄歸入同一個縮減器。我感到震驚。
請幫忙!
不清楚輸出結果:您剛看到一個映射器的輸出?他們純粹是「id1」或「id2」? – asksw0rder
id,id2是整數用戶id,比如說id1是:1234和id2是1298 –
我可以讓你發佈你的分區代碼嗎?謝謝。 –