首页 > 解决方案 > 如何保存 Spark mllib KMeans 模型?model.save 导致空目录

问题描述

我有一个流源,我试图首先导出聚类 K-Means 模型。稍后我计划将此模型加载到 StreamingKMeans。这是我走了多远,但保存操作导致空文件夹/数据。

srtLabeledPoints.foreachRDD{ rdd => {
   import sparkSession.implicits._   

   val testTrain = rdd.randomSplit(Array(0.3, 0.7))      
   val test = testTrain(0)
   val train = testTrain(1)

   val model = kMeans.run(train.map(f => f.features))  
   val a = model.predict(test.map(f => f.features))
   println("******************")       
   a.take(50).foreach(println)
   val b = model.save(sparkSession.sparkContext, "/mnt/c/Users/ssss/ml/oooModel3" + a.id)
   println("******************")       
   }
   rdd.unpersist()
 }

其中kmeans如下

val kMeans   = new org.apache.spark.mllib.clustering.KMeans()
  .setK(20) //# of clusters
  .setSeed(31)

我看到控制台上显示的分类(0 到 19 之间)(带有 take 操作)。但是 /data 是空的,并且 /metadata 有一个 1Kb 的文件,其内容如下:

{"class":"org.apache.spark.mllib.clustering.KMeansModel","version":"2.0","k":20,"distanceMeasure":"euclidean","trainingCost":5.147088938203919E11}

为了保存模型,我做错了什么?

标签: scalaapache-sparkspark-streamingk-meansapache-spark-mllib

解决方案


推荐阅读