text: Title: [Core] map_batches cannot guarantee a stable batch_size, but if drop_last=True is set, it can be guaranteed (although data will be lost). Can we consider adding this parameter to map_batches?
  Body: ### Description
  
  map_batches cannot guarantee a stable batch_size, but if drop_last=True is set, it can be guaranteed (although data will be lost). Can we consider adding this parameter to map_batches?
  
  ### Use case
  
  ```
  import ray
  import numpy as np
  
  ray.init()
  def square_root_batch(batch):
      print("len", len(batch["value"]))
      batch["sqrt_value"] = np.sqrt(batch["value"])
      return batch
  
  data = [{"value": float(np.random.randint(1, 100))} for _ in range(600004)]
  ds = ray.data.from_items(data)
  
  ds = ds.map_batches(
      square_root_batch,  
      concurrency=4, 
      batch_size=16, 
  )
  
  ds.take_all()
  ```
  
  
  many batch length is not 16.
  
  but when i change blocks_to_batches(data/_internal_block_batching/util.py) drop_last = True, each batch is 16.
  
  can we add drop_last in map_batches?