我正在尝试使用Spark协作过滤来实现推荐系统。Spark ML-未能使用MatrixFactorizationModel加载模型
首先我准备模型和保存到磁盘:
MatrixFactorizationModel model = trainModel(inputDataRdd);
model.save(jsc.sc(), "/op/tc/model/");
当我使用单独的过程中,程序失败,并以下例外加载模型:
代码:
static JavaSparkContext jsc ;
private static Options options;
static{
SparkConf conf = new SparkConf().setAppName("TC recommender application");
conf.set("spark.driver.allowMultipleContexts", "true");
jsc= new JavaSparkContext(conf);
}
MatrixFactorizationModel model = MatrixFactorizationModel.load(jsc.sc(),
"/op/tc/model/");
例外:
线程“main”异常java.io.IOException:不是文件: maprfs:/ op/tc/model/data at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:324) 在org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:199) 在org.apache.spark.rdd.RDD $$ anonfun $分区$ 2.适用(RDD.scala:239) 在org.apache在scala.Option.getOrElse(Option.scala:120) 在org.apache.spark.rdd.RDD.partitions(RDD:.spark.rdd.RDD $$ anonfun $ $分区2.适用(237 RDD.scala) .scala:237) at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:35) at org.apache.spark.rdd.RDD $$ anonfun $ partitions $ 2.apply(RDD.scala:239 ) 在org.apache.spark.rdd.RDD $$ anonfun $分区$ 2.适用(RDD.scala:237) 在scala.Option.getOrElse(Option.scala:120) 在org.apache.spark.rdd。 RDD.partitions(RDD.scala:237) at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:35) at org.apache.spark.rdd.RDD $$ anonfun $ partitions $ 2.apply( RDD.scala:239) at org.apache.spark.rdd.RDD $$ anonfun $ partitions $ 2.apply(RDD.scala:237) at scala.Option.getOrElse(Option.scala:120) at org。 apache.spark.rdd.RDD.partitions(RDD.scala:237) at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:35) at org.apache.spark.rdd.RDD $$ anonfun $ partitions $ 2.apply(RDD.scala:239) at org.apache.spark.rdd.RDD $$ anonfun $分区$ 2.适用(RDD.scala:237) 在scala.Option.getOrElse(Option.scala:120) 在org.apache.spark.rdd.RDD。分区(RDD.scala:237) 在org.apache.spark.SparkContext.runJob(SparkContext.scala:1952) 在org.apache.spark.rdd.RDD $$ anonfun $总$ 1.适用(RDD.scala: 1114) at org.apache.spark.rdd.RDDOperationScope $ .withScope(RDDOperationScope.scala:150) at org.apache.spark.rdd.RDDOperationScope $ .withScope(RDDOperationScope.scala:111) at org.apache。 spark.rdd.RDD.withScope(RDD.scala:316) at org.apache.spark.rdd.RDD.aggregate(RDD.scala:1107) at org.apache.spark.mllib.recommendation.MatrixFactorizationModel.countApproxDistinctUserProduct( MatrixFactorizationModel .scala:96) 在org.apache.spark.mllib.recommendation.MatrixFactorizationModel.predict(MatrixFactorizationModel.scala:126) 在com.aexp.cxp.recommendation.ProductRecommendationIndividual.main(ProductRecommendationIndividual.java:62) 在太阳.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect中。 Method.invoke(Method.java:497) at org.apache.spark。deploy.SparkSubmit $ .org $ apache $ spark $ deploy $ SparkSubmit $$ runMain(SparkSubmit.scala:742) at org.apache.spark.deploy.SparkSubmit $ .doRunMain $ 1(SparkSubmit.scala:181) at org。 apache.spark.deploy.SparkSubmit $ .submit(SparkSubmit.scala:206) at org.apache.spark.deploy.SparkSubmit $ .main(SparkSubmit.scala:121) at org.apache.spark.deploy.SparkSubmit。主要(SparkSubmit.scala)
是否有任何配置我需要设置为加载模型?任何建议都会很有帮助。
我认为这很清楚。你的文件不存在(至少,它不存在于奴隶,因为我们可以看到它正在做一个映射操作) – Dici
如果我加载模型在我保存它的同一个进程。它不会抱怨:( –
)在一个侧面节点上,我不推荐使用'allowMultipleContexts'。我从来没有在Spark配置中看到过它,这意味着它仍然没有足够的支持来将它暴露给 – Dici