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

MCh*_*uri 0 java hadoop exception mapper

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

这是我的mapper的输入:

100, 200 300 400 500 600
200, 100 300 400
300, 100 200 400 500
400, 100 200 300
500, 100 300
600, 100
Run Code Online (Sandbox Code Playgroud)

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

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);
}                                            
Run Code Online (Sandbox Code Playgroud)

当我执行此操作时,我将获得正确的值friend2.(Intege.parseInt这里工作正常).变量friend1应该将值设为"100".但是Integer.ParseInt没有用,我收到这样的错误:

java.lang.Exception: java.lang.NumberFormatException: For input string: "100"
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:354)
Caused by: java.lang.NumberFormatException: For input string: "100"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
    at com.hadoop.CFMapper.map(CFMapper.java:29)
    at com.hadoop.CFMapper.map(CFMapper.java:1)
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:430)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:366)
    at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:223)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

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

sst*_*tan 6

您的文件具有无效的Unicode字符'ZERO WIDTH NO-BREAK SPACE'(U + FEFF).你需要摆脱它.

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

我应该提一下,在代码中修剪字符串将无法摆脱该字符.你真的需要进入输入文件并从那里修复它.

你会找到关于如何摆脱这个线程中的角色的建议.

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