2016-09-15 55 views
1

我在数组中有字符串。我需要将基于索引的数组的所有元素附加到mapreduce中的Text()。我需要的值作为字符串附加在文本()如何将数组中的字符串附加到mapreduce中的Text()

例如:

String s = "12,23"; 
String[] array = s.split(","); 
Text t1 = new Text(); 
for(int i=0;i<array.length;i++) { 
    t1.append(array[i]); 
} 

回答

0

您需要使用此方法:append(byte[] utf8, int start, int len)Javadoc

所以,你的代码看起来是这样的:

t1.append(array[i].getBytes(), 0, array[i].getBytes().length); 

作为快速单元测试:

@Test 
public void textAppendTest() { 

    String s = "12,23"; 
    String[] array = s.split(","); 
    Text t1 = new Text(); 
    for(int i=0;i<array.length;i++){ 
     t1.append(array[i].getBytes(), 0, array[i].getBytes().length); 
    } 
    System.out.println(t1); // prints 1223 
} 
+0

它走只有最后一个值,我的意思是我得到只有23作为输出.. – Ninja

+0

@Ninja - 我只是增加了一个修正,它现在适用于我 –

+0

我也试过,我用0替换了开始。它不适用于我:( – Ninja

0

你可以做这样无需splited字符串数组的:

String str = "12,23"; 
String newStr = str.replace("," , ""); // or replace with any character or string you want between those numbers 
Text text = new Text(newStr); 
+0

我不想在这种方法做,我必须基于索引访问 – Ninja

0

@Binary书呆子:

我想下面的步骤:

添加以下线的方法初始化()

in = new LineReader(filein, conf); 
while (in.readLine(line) > 0) { 
length.add(line.toString()); 
count++; 
} 

2。这样做

value = new Text(); 
value.append(length.get(i).getBytes(), 0, length.get(i).getBytes().length); 

它不是给我的附加结果..

+0

你应该添加此你的问题是否是一个澄清,它不是一个答案。它不清楚上面的代码是如何适合你的问题的。2.''适合哪里? –

+0

那么,2.将被添加到nextKeyValue()方法中customRecordReader – Ninja

+0

这听起来像你指的是你提出的另一个问题,我建议你保持问题的焦点,因为这个问题是(并且已经在我的意见中得到了回答),并询问另一个问题是否有其他问题。 –

相关问题