For RDD the shuffle is already skipped but the sort is not. In spark-sorted we track partitioning and sorting within partitions for key-value RDDs and can avoid the sort. See:
For Dataset/DataFrame such optimizations are done automatically, however it's currently not always working for Dataset, see: