关于在spark中保存模型文件

时间:2015-10-23 10:54:17

标签: apache-spark

我在以下链接中测试线性支持向量机(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文件。

任何人都知道这个的原因吗?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。问题是由保存和加载功能引起的。如果在多节点中运行spark,则在保存模型时,spark save API只会在节点上保存相应的分区,因此每个节点上的模型都不完整。但是load函数的源代码使用textFile API来加载模型,而textFile需要每个节点上的文件都相同。所以它导致了问题。我解决它的方法是将模型保存在HDFS上,同时浪费空间。