code: def split_input(cls, mapper_spec):
      
      params = _get_params(mapper_spec)
      blob_keys = params[cls.BLOB_KEYS_PARAM]
      if isinstance(blob_keys, basestring):
        # This is a mechanism to allow multiple blob keys (which do not contain
        # commas) in a single string. It may go away.
        blob_keys = blob_keys.split(",")
  
      blob_sizes = {}
      for blob_key in blob_keys:
        blob_info = blobstore.BlobInfo.get(blobstore.BlobKey(blob_key))
        blob_sizes[blob_key] = blob_info.size
  
      shard_count = min(cls._MAX_SHARD_COUNT, mapper_spec.shard_count)
      shards_per_blob = shard_count // len(blob_keys)
      if shards_per_blob == 0:
        shards_per_blob = 1
  
      chunks = []
      for blob_key, blob_size in blob_sizes.items():
        blob_chunk_size = blob_size // shards_per_blob
        for i in xrange(shards_per_blob - 1):
          chunks.append(BlobstoreLineInputReader.from_json(
              {cls.BLOB_KEY_PARAM: blob_key,
               cls.INITIAL_POSITION_PARAM: blob_chunk_size * i,
               cls.END_POSITION_PARAM: blob_chunk_size * (i + 1)}))
        chunks.append(BlobstoreLineInputReader.from_json(
            {cls.BLOB_KEY_PARAM: blob_key,
             cls.INITIAL_POSITION_PARAM: blob_chunk_size * (shards_per_blob - 1),
             cls.END_POSITION_PARAM: blob_size}))
      return chunks
docs: Returns a list of shard_count input_spec_shards for input_spec.
  
      Args:
        mapper_spec: The mapper specification to split from. Must contain
            'blob_keys' parameter with one or more blob keys.
  
      Returns:
        A list of BlobstoreInputReaders corresponding to the specified shards.