将 ML 库建议写入文本文件
Writing Out ML lib recommendations to text file
我正在使用 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)
我知道我需要使用地图将评分对象转换为文本对象,但我无法使用地图的任何组合来工作correctly.I认为这个问题是稍微复杂一点的版本
How to export mllib als results into text file Spark - 但那里建议的解决方案对我不起作用,因为我正在与多个用户打交道。
有几种方法可以解决这个问题,包括手动创建输出字符串:
recs.mapValues(_.mkString(",")).saveAsTextFile(somePath)
或转换为原生 Scala 类型,如 List
或 Vector
:
recs.mapValues(_.toVector).saveAsTextFile(somePath)
我正在使用 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)
我知道我需要使用地图将评分对象转换为文本对象,但我无法使用地图的任何组合来工作correctly.I认为这个问题是稍微复杂一点的版本 How to export mllib als results into text file Spark - 但那里建议的解决方案对我不起作用,因为我正在与多个用户打交道。
有几种方法可以解决这个问题,包括手动创建输出字符串:
recs.mapValues(_.mkString(",")).saveAsTextFile(somePath)
或转换为原生 Scala 类型,如 List
或 Vector
:
recs.mapValues(_.toVector).saveAsTextFile(somePath)