Github user j-baker commented on a diff in the pull request:

    https://github.com/apache/spark/pull/18543#discussion_r128174022
  
    --- Diff: 
sql/catalyst/src/main/java/org/apache/spark/sql/execution/UnsafeExternalRowSorter.java
 ---
    @@ -211,7 +211,10 @@ public int compare(Object baseObj1, long baseOff1, 
Object baseObj2, long baseOff
           // TODO: Why are the sizes -1?
           row1.pointTo(baseObj1, baseOff1, -1);
           row2.pointTo(baseObj2, baseOff2, -1);
    -      return ordering.compare(row1, row2);
    +      int comparison = ordering.compare(row1, row2);
    +      row1.pointTo(null, 0L, -1);
    +      row2.pointTo(null, 0L, -1);
    --- End diff --
    
    I suppose that if you assume that you can only use these sorters once, then 
you can probably null out the reference to the comparator once you've 
constructed the UnsafeSorterSpillMerger, and that would also solve the problem 
I've been seeing (the callback keeping a strong reference).
    
    It'd still feel weird that you have a comparator that could potentially be 
responsible for the liveness of hundreds of megabytes of memory, though.


---
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 [email protected] or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to