0
我在地圖上有一個值,我需要它是減少的第一個值。是否有可能我將這個值保存在hdfs中,然後我在setup()中讀取它呢? 是否有可能在安裝程序()中讀取hdfs文件中的reduce?是否可以將屬性從mapper傳遞給hadoop中的reducer?
我在地圖上有一個值,我需要它是減少的第一個值。是否有可能我將這個值保存在hdfs中,然後我在setup()中讀取它呢? 是否有可能在安裝程序()中讀取hdfs文件中的reduce?是否可以將屬性從mapper傳遞給hadoop中的reducer?
這樣做有多種方式:
對於選項#1,假設您有一個Text鍵和Text值從mapper傳遞到reducer。 而且你知道你的任何一把鑰匙都不能以空格「」開頭。所以你可以做的是構造一個特殊的鍵「」+#,其中#是一個reducer分區id(從0到N-1,其中N是你的reducer的總數)。然後在一個循環中輸入「01」,「02」,「03」......這樣的密鑰,並輸入你需要傳遞給每個reducer的值。 設置自定義partitioner,使其認識到「特殊」鍵和路線給對應分區:
int getPartition(Text key, Text value, int numPartitions) {
if (key.toString().startWith(" ") {
//special key
int partId = Integer.parseInt(key.toString().substring(1));
return partId;
} else {
//regular key
return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}
}
顯然,如果你有使用的密鑰其他數據類型,你仍然可以創造性地想出了一個類似的邏輯。
謝謝您的回答。 :) –