我有一個映射函式,它以以下形式發送資料(它們的鍵值不重要)
key: "somevalue"
value: "value \t comma separated values"
例如
key:"0"
value:"5\t1,2,3,4"
如果我使用此代碼:
Text debug;
for (Text val : values) {
String[] segments = val.toString().split("\t");
debug = new Text();
debug.set(val.toString());
context.write(key, debug);
}
我得到了正確的輸出,例如
key value
0 8 1,2,4,5
0 2 0,4,5
但是如果我嘗試這段代碼,輸出會變得很奇怪:
Text debug;
for (Text val : values) {
String[] segments = val.toString().split("\t");
debug = new Text();
if(val.toString().split("\t").length > 1) {
try{
debug.set(val.toString().split("\t")[1]);
}catch(Exception e) {
debug.set("Exception")
}
}
context.write(key, debug);
}
預期的輸出將是:
key second part of value (after \t)
1 2,3,4,5,6
1 4,5,6,6,7
但是我得到的輸出是這樣的:
key Tab (tab character after key)
1TAB
1TAB
...
2TAB
如果我替換try...catch為if...else:
Text debug;
for (Text val : values) {
String[] segments = val.toString().split("\t");
debug = new Text();
if(val.toString().split("\t").length > 1) {
debug.set(val.toString().split("\t")[1]);
} else {
debug.set("only one");
}
context.write(key, debug);
}
這給出了結果
0 only one
...
100 only one
這是怎么回事?我檢查了Java,似乎如果我打電話"1\t2".split("\t")給我["1", "2"]
uj5u.com熱心網友回復:
我發現了問題,我將它用作組合器和減速器。只需將其僅用作減速器即可。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/530337.html
標籤:爪哇Hadoop映射减少
