java.lang.NumberFormatException:对于输入字符串:执行MapReduce时为“100”

时间:2015-06-16 14:58:30

标签: java exception hadoop mapper

我正在写一个MapReduce工作,用于在Facebook上寻找普通朋友。

这是我的映射器的输入:

SETX FOO bar

这是我的映射器代码的一部分:

100, 200 300 400 500 600
200, 100 300 400
300, 100 200 400 500
400, 100 200 300
500, 100 300
600, 100

当我执行此操作时,我在map{ String line = value.toString(); String[] LineSplits = line.split(","); String[] friends = LineSplits[1].trim().split(" "); for(int i =0; i<friends.length;i++) { int friend2 = Integer.parseInt(friends[i]); System.out.println(friend2); } int friend1 = Integer.parseInt(LineSplits[0]); System.out.println(friend1); } 中获得了正确的值。 (friend2在这里正常工作)。变量friend1应该将值设为“100”。但是Intege.parseInt无效,我收到的错误是这样的:

Integer.ParseInt

所以我被困在这里。为什么我会为此获取NumberFormatException?我该如何纠正这个问题?

2 个答案:

答案 0 :(得分:6)

您的文件包含无效的Unicode字符&#39; ZERO WIDTH NO-BREAK SPACE&#39; (U + FEFF)。你需要摆脱它。

该角色不可见。所以你没有意识到它就在那里是可以理解的。你可能错误地复制粘贴在那里。您必须查看从中复制数据的位置。

我应该提一下,在代码中修剪你的字符串并不能解决这个问题。你真的需要进入输入文件并从那里修复它。

您可以找到有关如何摆脱此thread中字符的建议。

否则,如果您的文件不是太大,为什么不启动一个全新的文件,并手动输入您的值以确保安全。 :)

答案 1 :(得分:0)

编辑:正如您在评论中提到的,您获得的长度为4

也许你可以尝试一下。

LineSplits[0].replace(u'\ufeff', '') ,然后尝试解析并查看会发生什么

如果你看一下Integer.parseInt() jsl 它说

Throws:

NumberFormatException - if the string does not contain a parsable integer.

那么当string: "100"到达ENDOFLINE时会发生什么。它可以具有字符,如\ r \ n或\ n,如line terminationnull ,如果已达到流的末尾,显然不是“可解析的”整数“即可。因此,您需要在解析之前检查这些内容。