class_docstr: Logical operator for read.
code: def __init__(
      self,
      datasource: Datasource,
      datasource_or_legacy_reader: Union[Datasource, Reader],
      parallelism: int,
      mem_size: Optional[int],
      num_outputs: Optional[int] = None,
      ray_remote_args: Optional[Dict[str, Any]] = None,
  ):
      super().__init__(
          f"Read{datasource.get_name()}",
          None,
          num_outputs,
          ray_remote_args,
      )
      self._datasource = datasource
      self._datasource_or_legacy_reader = datasource_or_legacy_reader
      self._parallelism = parallelism
      self._mem_size = mem_size
      self._detected_parallelism = None
  
file_path: ray/python/ray/data/_internal/logical/operators/read_operator.py
imports: from typing import Any, Dict, Optional, Union
  from ray.data._internal.logical.operators.map_operator import AbstractMap
  from ray.data.datasource.datasource import Datasource, Reader
label_desc: Use image node_id 1 to create a new Read object from inherited base classes: AbstractMap with example: obj = Read(datasource, datasource_or_legacy_reader, parallelism, mem_size, num_outputs, ray_remote_args)