我在以下链接中测试线性支持向量机(SVM)的代码:
http://spark.apache.org/docs/latest/mllib-linear-methods.html#linear-support-vector-machines-svms
我使用spark-shell --master spark://192.168.0.181:7077
测试了代码。
我修改了最后两行:
model.save(sc, "file:///Apps/spark/data/mllib/testModelPath")
val sameModel = SVMModel.load(sc, "file:///Apps/spark/data/mllib/testModelPath")
model.save没有错误但是当我尝试加载该模型时,它给出了以下消息: INFO mapred.FileInputFormat:要处理的总输入路径:0 java.lang.UnsupportedOperationException:空集合 : :
当我在没有file:///
的情况下进行测试时,模型保存到HDFS系统,我可以加载该模型而不会出错。
hadoop@XXX /Apps/spark/data/mllib/testModelPath/data> ll
drwxrwxr-x 2 hadoop hadoop 4096 2015-10-07 16:47 ./
drwxrwxr-x 4 hadoop hadoop 4096 2015-10-07 16:47 ../
-rw-rw-r-- 1 hadoop hadoop 8 2015-10-07 16:47 ._SUCCESS.crc
-rw-rw-r-- 1 hadoop hadoop 16 2015-10-07 16:47 ._common_metadata.crc
-rw-r--r-- 1 hadoop hadoop 0 2015-10-07 16:47 _SUCCESS
-rw-r--r-- 1 hadoop hadoop 932 2015-10-07 16:47 _common_metadata
保存模型后检查文件夹时,发现未创建_metadata文件。
任何人都知道这个的原因吗?
答案 0 :(得分:1)
我遇到了同样的问题。问题是由保存和加载功能引起的。如果在多节点中运行spark,则在保存模型时,spark save API只会在节点上保存相应的分区,因此每个节点上的模型都不完整。但是load函数的源代码使用textFile API来加载模型,而textFile需要每个节点上的文件都相同。所以它导致了问题。我解决它的方法是将模型保存在HDFS上,同时浪费空间。