code: def repartitionAndSortWithinPartitions(self, numPartitions=None, partitionFunc=portable_hash,
                                             ascending=True, keyfunc=lambda x: x):
          if numPartitions is None:
              numPartitions = self._defaultReducePartitions()
          memory = _parse_memory(self.ctx._conf.get("spark.python.worker.memory", "512m"))
          serializer = self._jrdd_deserializer
          def sortPartition(iterator):
              sort = ExternalSorter(memory * 0.9, serializer).sorted
              return iter(sort(iterator, key=lambda k_v: keyfunc(k_v[0]), reverse=(not ascending)))
          return self.partitionBy(numPartitions, partitionFunc).mapPartitions(sortPartition, True)