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

Reply via email to