code: func (d *Dataset) CoGroup(name string, other *Dataset, sortOption *SortOption) *Dataset {
  	sorted_d := d.Partition(name, len(d.Shards), sortOption).LocalSort(name, sortOption)
  	if d == other {
  		// this should not happen, but just in case
  		return sorted_d.LocalGroupBy(name, sortOption)
  	}
  	sorted_other := other.Partition(name, len(d.Shards), sortOption).LocalSort(name, sortOption)
  	t := sorted_d.CoGroupPartitionedSorted(name, sorted_other, sortOption.Indexes())
  	t.IsLocalSorted = sortOption.orderByList
  	return t
  }
docs: // CoGroup joins two datasets by the key,
  // Each result row becomes this format:
  //   (key, []left_rows, []right_rows)