我的數據結構如下:如何查找hadoop數據集中所有鍵的組合?
A, 23
B, 324235
C, 123
D, 213
的示例字計數映射器具有以下映射函數簽名:
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
核心問題:
Text value
是一個簡單的單個線來自輸入文件或單個鍵。我如何一次訪問所有的密鑰?看來線路(和他們的後來減少擴張)不知道其他的輸入線
實例應用:
我期待輸出ID的所有組合,這需要的鑰匙以「瞭解對方的」
AB
AC
AD
BC
BD
CD
編輯:幼稚的做法/直覺
一種方式來完成它,我相信是使用映射到項目中的每個線映射到相同的密鑰,然後在減速映射的
結果:
CONST_KEY, A
CONST_KEY, B
CONST_KEY, C
CONST_KEY, D
減速機:
public void reduce(Text key, Iterable<Text> values, Context context){
//PSEUDO CODE
for(int i = 0; i < values.length; i++){
for(int j = i+1; j < values.length; j++){
String combo = concat(values[i], values[j]);
}
}
}
但這似乎瘋狂的效率不高
此問題適合從MapReduce生成的排列類別。請參閱https://stackoverflow.com/questions/6535878/permutations-with-mapreduce。 –
更糟糕的是,您編寫reduce的方式無法正常工作,因爲您無法像那樣訪問'values'。 Hadoop不允許你訪問值列表,你可以迭代一次值。如果你想要做更多,你需要將它們存儲在記憶中。 –