Github user dbtsai commented on a diff in the pull request: https://github.com/apache/spark/pull/9843#discussion_r45953181 --- Diff: mllib/src/main/scala/org/apache/spark/mllib/feature/IDF.scala --- @@ -218,7 +218,7 @@ private object IDFModel { newValues(k) = values(k) * idf(indices(k)) k += 1 } - Vectors.sparse(n, indices, newValues) + Vectors.sparse(n, indices, newValues).toSparse --- End diff -- When we implemented `foreachActive`, we decided to loop through all the `active` elements in the `Vector`; hence, `0` in `Sparse Vector` considers as active. Users have to filter out `zero` explicitly in their code. I think `Vectors.sparse` should create a sparse vector as the input indices and values array provided by users without filtering out the zero automatically which will be very expensive. For this PR, I would recommend change line 58 to ``` new IDFModel(idf.compressed) ``` and in the transfer function, we implement the two extra cases for idf: sparse and v: sparse, and idf: sparse and v: dense. Thus, we should have better performance. btw, for idf: sparse and v: sparse, we can use array buffer to keep track of non-zero elements.
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org