我在mllib(scala中)中使用ALS实现来为一组用户生成产品推荐。我的ALS实施工作正常并产生评级。我使用了这一行:
val recs = model.recommendProductsForUsers(20)
为每个用户创建一个包含20个产品推荐的数组。这很好,收视率如下: (96,数组(评级(96,61,1.0889034936577194E-8),评级(96,274,7.364985542945079E-9)..)
即它的结构为Array [(Int,Array [org.apache.spark.mllib.recommendation.Rating])]
我需要将这些建议写入文本文件。我试过了:
recs.saveAsTextFile("./testoutput")
并运行,但输出不是我需要的数字,而是看起来它是某种对象(而不是对象内的文本)
(87,[Lorg.apache.spark.mllib.recommendation.Rating; @ 28ccda46)
我知道我需要使用地图将评级对象转换为文本对象,但我无法使任何地图组合正常工作。我认为这个问题是一个稍微复杂的版本 How to export mllib als results into text file Spark - 但解决方案表明这对我不起作用,因为我正在处理多个用户。
答案 0 :(得分:2)
有几种方法可以解决这个问题,包括手动创建输出字符串:
recs.mapValues(_.mkString(",")).saveAsTextFile(somePath)
或转换为原生Scala类型,例如List
或Vector
:
recs.mapValues(_.toVector).saveAsTextFile(somePath)