意外的关键字参数' coldStartStrategy'适用于Spark ml的ALS

时间:2017-06-11 00:21:43

标签: python apache-spark pyspark apache-spark-sql apache-spark-ml

我发现了一些帖子,用户想知道为什么他们在使用ALS时会在预测中收到NaN值。我遇到了同样的问题,似乎找到了答案和实施的解决方案,并在文档中进行了详细讨论:

注意:这里有关于coldStartStrategy()的文档的工作链接,但似乎由于我的问题,文档被删除了。

我认为可以解决这个问题。除非更新到Spark 2.1.1后(我还没有在2.1.0上工作),我仍然会收到同样的错误:

TypeError: init ()得到了一个意外的关键字参数' coldStartStrategy'

这是我尝试使用参数的地方:

full_train, full_test = ugr_df.randomSplit([0.7, 0.3], seed=0L)
als = ALS(rank = rank, maxIter = maxIter, regParam = lmbda, 
          userCol = "user_id", itemCol="game_id", seed = seed, 
          ratingCol="rating", coldStartStrategy="drop")
optimized_model = als.fit(full_train)

我以这种方式导入ALS:

from pyspark.ml.recommendation import ALS

当我拿出冷启动参数时,我的代码工作正常。从我在文档中看到的,我正确地实现它。

  • 这个论点没有正常工作的原因吗?
  • 如果我要离开它,我可以安全地执行以下操作以获得相同的效果吗?即以下代码是coldStartStrategy参数的同义词?

    predictions = optimized_model.transform(full_test)
    predictions_drop = predictions.dropna()
    

然后继续使用predictions_drop df进行回归分析。

1 个答案:

答案 0 :(得分:1)

coldStartStrategy已在Spark 2.2中引入SPARK-14489,尚未发布:

如果您想使用它,您必须从源代码构建Spark或使用开发人员构建。

调用na.drop应与使用drop策略具有相同的效果,internally it is implemented as

case ALSModel.Drop =>
  predictions.na.drop("all", Seq($(predictionCol)))