code: func (d *Dataset) Top(name string, k int, sortOption *SortOption) *Dataset {
  	ret := d.LocalTop(name, k, sortOption)
  	if len(d.Shards) > 1 {
  		ret = ret.MergeSortedTo(name, 1).LocalLimit(name, k, 0)
  	}
  	return ret
  }
docs: // Top streams through total n items, picking reverse ordered k items with O(n*log(k)) complexity.
  // Required Memory: about same size as n items in memory