DataFrame中的RowMatrix包含空值

时间:2017-11-16 17:47:56

标签: scala apache-spark machine-learning apache-spark-mllib imputation

相对于电影,我有DataFrame个用户评分(从1到5)。为了获得第一列是电影ID的DataFrame,其余列是每个用户对该电影的评级,我会执行以下操作:

val ratingsPerMovieDF = imdbRatingsDF
  .groupBy("imdbId")
  .pivot("userId")
  .max("rating")

现在,我在这里得到一个DataFrame,其中大多数值为null,因为大多数用户只评价了几部电影。

我有兴趣计算这些电影之间的相似性(基于项目的协同过滤)。

我正在尝试使用评级列值组合RowMatrix(使用mllib进行进一步的相似性计算)。但是,我不知道如何处理null值。

以下代码我尝试为每行获取一个Vector:

val assembler = new VectorAssembler()
  .setInputCols(movieRatingsDF.columns.drop("imdbId"))
  .setOutputCol("ratings")

val ratingsDF = assembler.transform(movieRatingsDF).select("imdbId", "ratings")

给我一​​个错误:

Caused by: org.apache.spark.SparkException: Values to assemble cannot be null.

我可以使用.na.fill(0)将它们替换为0,但这会产生不正确的相关结果,因为几乎所有的Vector都会变得非常相似。

在这种情况下,有人可以建议做什么吗?这里的最终目标是计算行之间的相关性。我想以某种方式使用SparseVectors(忽略null值,但我不知道如何。

我是Spark和Scala的新手,所以其中一些可能没什么意义。我想要更好地理解事情。

0 个答案:

没有答案