0
HashPartitioner<Text,Text> hash=new HashPartitioner<Text,Text>();
@Override
public int getPartition(CompositeKeyClass keyClass, Text valClass, int numOfPartition) {
// TODO Auto-generated method stub
try {
String[] type=valClass.toString().split(",");
if(type[0].equals("Mapper1")) {
return (hash.getPartition(keyClass.getFirst(), valClass, numOfPartition))%numOfPartition;
} else {
return (hash.getPartition(keyClass.getFirst(), valClass, numOfPartition))%numOfPartition;
}
}
}
我在分區程序類中使用上述代碼來獲取我的自定義類的密鑰。所有的工作正常,但我希望有文本「Mapper1」的值發送到第一個減速器,另一個發送到第二個。我怎樣才能做到這一點?我已將job.numOfReduceTaks
設置爲2.請幫助!如何在自定義密鑰的情況下爲自定義分區程序設置numReduceTask
如何返回getPartition方法呢?它需要與關鍵類一起返回以便將正確的關鍵字發送給reducer。 –
@AmardeepSingh好吧,我沒有得到你想說的話。您的getPartition()方法只需要返回一個int(即0 <=分區號
基本上我使用自定義鍵類的自定義分區程序。如果只有一個Reducer,以下代碼可以工作。我需要如何設置,以便在需要兩臺減速機時處理這種情況?內聯「\t公共靜態類分區擴展分區程序 \t { \t \t \t 私人\t HashPartitioner 散列=新HashPartitioner (); \t \t @覆蓋 \t \t公衆詮釋getPartition(CompositeKey鍵,文字VAL,INT NUM){ \t \t \t \t回hash.getPartition(key.getFirst(),VAL,NUM)%NUM; \t \t} \t \t \t}' –