code: def mapPartitionsWithIndexNoSerdes(
      self,
      map_partition_op: Callable[
          [int, Iterable[Tuple[bytes, bytes]]],
          Iterable[Tuple[bytes, bytes]],
      ],
      shuffle=False,
      output_key_serdes_type=None,
      output_value_serdes_type=None,
      output_partitioner_type=None,
  ):
      # Note: since we use this method to send data to other parties, and if the engine in other side is not spark,
      # we should guarantee the data properly partitioned before we send each partition to other side.
      # So we should call _as_partitioned() before we call this method.
      # TODO: but if other side is also spark, we can skip _as_partitioned() to save time.
      self._as_partitioned()
      return super().mapPartitionsWithIndexNoSerdes(
          map_partition_op=map_partition_op,
          shuffle=shuffle,
          output_key_serdes_type=output_key_serdes_type,
          output_value_serdes_type=output_value_serdes_type,
          output_partitioner_type=output_partitioner_type,
      )
  
imports: import logging
  import struct
  import typing
  from typing import Callable, Iterable, Tuple, Optional, Any
  import pyspark
  from pyspark.rddsampler import RDDSamplerBase
  from fate.arch import URI
  from fate.arch.computing.api import KVTable, ComputingEngine, K, V
  from fate.arch.computing.api._table import _lifted_reduce_to_serdes, get_serdes_by_type
  from ._materialize import materialize, unmaterialize
label_desc: Use image node_id 6 for calling the Table obj's underlying member method code with example usage: obj.mapPartitionsWithIndexNoSerdes(map_partition_op, shuffle, output_key_serdes_type, output_value_serdes_type, output_partitioner_type) and returns: super