Scala 将ML lib建议写入文本文件
我正在使用mllib中的ALS实现(在scala中)为一组用户生成产品建议。我的ALS实现工作正常并生成评级。我用过这句话:Scala 将ML lib建议写入文本文件,scala,apache-spark,apache-spark-mllib,Scala,Apache Spark,Apache Spark Mllib,我正在使用mllib中的ALS实现(在scala中)为一组用户生成产品建议。我的ALS实现工作正常并生成评级。我用过这句话: val recs = model.recommendProductsForUsers(20) 为每个用户创建20个产品建议的数组。这很好,评级如下所示: (96,阵列(额定值(96,61,1.0889034936577194E-8),额定值(96274,7.364985542945079E-9)…) 它的结构是数组[(Int,Array[org.apache.spark
val recs = model.recommendProductsForUsers(20)
为每个用户创建20个产品建议的数组。这很好,评级如下所示:
(96,阵列(额定值(96,61,1.0889034936577194E-8),额定值(96274,7.364985542945079E-9)…)
它的结构是数组[(Int,Array[org.apache.spark.mllib.recommendation.Rating])]
我需要将这些建议写入文本文件。我已尝试:
recs.saveAsTextFile("./testoutput")
这会运行,但输出的不是我需要的数字,而是某种对象(而不是对象中的文本)
(87,[Lorg.apache.spark.mllib.Recommension.Rating;@28ccda46)
我知道我需要使用地图将评级对象转换为文本对象,但我无法使任何地图组合正常工作。我认为这个问题是
-但是解决方案表明,这不适用于我,因为我要处理多个用户。有几种方法可以解决这一问题,包括手动创建输出字符串:
recs.mapValues(_.mkString(",")).saveAsTextFile(somePath)
或转换为本机Scala类型,如列表
或向量
:
recs.mapValues(_.toVector).saveAsTextFile(somePath)
谢谢!我认为关键是使用mapValues,而不仅仅是map。这两个答案对我来说都很好。不客气。也可以使用
map
来完成。mapValues
使它变得更短。主要问题是Java-Scala互操作。顺便说一句,请不要忘记。