Java:从Text中读取char和bytes

时间:2017-11-22 09:45:26

标签: java mapreduce hadoop2

我希望有一些好人可以帮助我从一行中读取一个char和byte,其数据类型为Text。

我有一个Text.toString(),其中模式是前2个字符后跟2个字节和剩余的字符。这是70的固定长度文件。

我必须忽略2个字节,2个字节显示为特殊字符(有时显示为单个字符,有时显示为2个字符)。

我尝试使用UTF-8,iso-8859-1,CP850,US-ASCII等,如下所示

byte[] utf8bytes = value.toString().getBytes("iso-8859-1");
LOG.info(new String(utf8bytes, Charset.forName("UTF-8")));

输入数据:

12��00a1A10a0000000abcdef0ghijkl0abcde000000f0gh1a0bcded1234z1234  z000000000000002
12ɹ00a1A10a0000000abcdef0ghijkl0abcde000000f0gh1a0bcded1234z1234  z000000000000002

输出应该是:     1200a1A10a0000000abcdef0ghijkl0abcde000000f0gh1a0bcded1234z1234 z000000000000002     1200a1A10a0000000abcdef0ghijkl0abcde000000f0gh1a0bcded1234z1234 z000000000000002

此脚本位于Hadoop Mapper中。 任何帮助都会很棒,因为我一直努力工作。

谢谢你, Revathy。

2 个答案:

答案 0 :(得分:0)

没有什么可以做到这一点。

  1. 使用您想要的逻辑编写自定义recordReader。
  2. 使用String子字符串。
  3. 使用byteBuffer并提取出您不需要的索引。

答案 1 :(得分:0)

如果您确定String中的所有其他字符都是字母数字,则可以使用replaceAll删除它们。请注意,我将空间留在那里,因为看起来您的预期输出想要保留它。

str = str.replaceAll("[^A-Za-z0-9 ]", "");

See it online!