java.lang.NumberFormatException : For input string: "100" while executing MapReduce 异常

标签 java exception hadoop mapper

我正在编写一个 MapReduce 作业,用于在 facebook 上寻找共同的 friend 。

这是我的映射器的输入:

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 中获得了正确的值。 (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)

所以我卡在这里了。为什么我会为此收到 NumberFormatException?我该如何纠正?

最佳答案

您的文件包含无效的 Unicode 字符“零宽度不间断空格”(U+FEFF)。你需要摆脱它。

字符不可见。所以你没有意识到它在那里是可以理解的。你可能错误地复制粘贴在那里。您必须查看从何处复制数据。

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

您会在 thread 中找到有关如何摆脱该角色的建议.

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

关于java.lang.NumberFormatException : For input string: "100" while executing MapReduce 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30871260/

相关文章:

java - 将 ActionBarSherlock 作为库添加到 Android 项目时出错

java - 打开另一个应用程序的按钮不起作用

xcode - 我可以阻止 Xcode 在遇到异常时显示 main.m 吗?

hadoop - 安装 Hadoop 后无法识别更新主机的 .xml/文件

hadoop - 在Hadoop框架中拆分大文件有什么好处

java - JVM 是生成字节码还是运行字节码?

Java:泛型捕获错误

python - 忽略来自生成器的异常

Java 自定义异常标准

apache-spark - PySpark:如何在读取 Parquet 时读取分区列