Mahout: java.lang.NumberFormatException:输入字符串格式错误

4

我正在尝试让mahout工作,但是出现了以下错误:

3/05/16 22:48:53 INFO mapred.MapTask: record buffer = 262144/327680
13/05/16 22:48:53 WARN mapred.LocalJobRunner: job_local_0001
java.lang.NumberFormatException: For input string: "1119"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Long.parseLong(Long.java:430)
    at java.lang.Long.parseLong(Long.java:483)
    at org.apache.mahout.cf.taste.hadoop.item.ItemIDIndexMapper.map(ItemIDIndexMapper.java:47)
    at org.apache.mahout.cf.taste.hadoop.item.ItemIDIndexMapper.map(ItemIDIndexMapper.java:31)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)
13/05/16 22:48:54 INFO mapred.JobClient:  map 0% reduce 0%
13/05/16 22:48:54 INFO mapred.JobClient: Job complete: job_local_0001
13/05/16 22:48:54 INFO mapred.JobClient: Counters: 0
Exception in thread "main" java.io.FileNotFoundException: File does not exist: /user/eric.waite/temp/preparePreferenceMatrix/numUsers.bin
    at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.openInfo(DFSClient.java:1843)
    at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.<init>(DFSClient.java:1834)
    at org.apache.hadoop.hdfs.DFSClient.open(DFSClient.java:578)

我的输入文件非常简单:(示例)userid,storyId,评分(1-5)

2840281,1119,2
2840321,1170,3
2840323,1124,5
2840371,1170,5
2840347,1157,3
2840371,1172,5
2840347,1157,5
2840358,1333,5
2840371,1172,5
2840347,1157,5

我正在尝试使用以下命令运行一个基本示例:

hadoop jar /sourcecode/mahout/mahout-distribution-0.7/mahout-core-0.7-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -s SIMILARITY_COOCCURRENCE --input ratings.dat --output output

Java信息:

java版本“1.7.0_13” Java(TM) SE Runtime Environment(build 1.7.0_13-b20)Java HotSpot(TM) 64-Bit Server VM(build 23.7-b01,mixed mode)我在mac 10.8.2上。

有人对为什么整数被读取为字符串并生成NumberFormatException有任何建议吗?

谢谢。


Java版本“1.7.0_13” Java(TM) SE Runtime Environment(版本1.7.0_13-b20) Java HotSpot(TM) 64位服务器虚拟机(版本23.7-b01,混合模式)我使用的是Mac 10.8.2操作系统。 - Eric W
导出JAVA_HOME=/usr/libexec/java_home -v 1.7 - Eric W
已将其放入您的问题中,对我来说,这看起来像是Java API中的一个错误(只要我们在该异常的引号之间找不到任何奇怪的字符)。 1119 绝对可以解析为长整型。 - Thomas Jungblut
你能否使用以下代码来检查是否是Java API的错误:System.out.println(Long.parseLong("1119")); - zsxwing
当然在Java中可以实现。 - Sean Owen
2个回答

1
你可能有一些非打印字符的问题。当然,它显示的字符串可以很好地解析为长整型。(引号仅为其错误消息的一部分。)
要了解我的意思,请尝试:
    System.out.println(Long.parseLong("\u00001119"));

它以相同的错误失败,这个错误本身令人困惑。 除了使用十六进制编辑器之外,不确定如何轻松调试此问题。

0
你可以调试RecommendJob并检查异常发生的位置,检查实际字符串值,可能输入文件中有一些空白或无用字符。 我也遇到了这个异常,我的异常出现在这里:
String[] tokens = TasteHadoopUtils.splitPrefTokens(value.toString());
long itemID = Long.parseLong(tokens[transpose ? 0 : 1]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接