REASON
图书馆项目,今天想测试下mahout的图书推荐算法。
借阅数据有30多万条,用kettle处理过后是这样
long,long,flout型,用逗号隔开,符合要求。
ERROR
运行后报错,model = new FileDataModel(new File(INPUTPATH)); 语句错误,提示空字符串错误。
错误信息:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.readUserIDFromString(FileDataModel.java:638)
at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.processLine(FileDataModel.java:412)
at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.processFile(FileDataModel.java:363)
at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.buildModel(FileDataModel.java:259)
at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.reload(FileDataModel.java:231)
at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<init>(FileDataModel.java:221)
at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<init>(FileDataModel.java:169)
at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<init>(FileDataModel.java:149)
at action.recommend.Commender.ItemBasedRecommend(Commender.java:68)
at action.recommend.Commender.main(Commender.java:30)
FIND
debug发现
果然有一行用户id为空,其紧跟的图书id不为空。
打开数据文件,ctrl+F,查找读书id,450976834041
锁定位置,果然有几行的第一个数据缺失了。
HANDLE
在kettle的transform新加一个组件,过滤掉空记录,当然也可以设置条件替换为一个固定值。毕竟是Test,先跑起来吧。