class_docstr: Implements a collection of iterators over a shared data stream.
class_docstr_tok: ["Implements","a","collection","of","iterators","over","a","shared","data","stream","."]
docstr: Implements DataIterator.
docstr_tok: ["Implements","DataIterator","."]
code: def stats(self) -> str:
      """Implements DataIterator."""
      # Merge the locally recorded iter stats and the remotely recorded
      # stream execution stats.
      summary = ray.get(self._coord_actor.stats.remote())
      summary.iter_stats = self._iter_stats.to_summary().iter_stats
      return summary.to_string()
  
imports: import copy
  import logging
  import threading
  import time
  from dataclasses import replace
  from typing import TYPE_CHECKING, Dict, Iterator, List, Optional, Tuple, Union
  import ray
  from ray.data._internal.execution.interfaces import NodeIdStr, RefBundle
  from ray.data._internal.execution.legacy_compat import execute_to_legacy_bundle_iterator
  from ray.data._internal.execution.operators.output_splitter import OutputSplitter
  from ray.data._internal.execution.streaming_executor import StreamingExecutor
  from ray.data._internal.stats import DatasetStats, DatasetStatsSummary
  from ray.data._internal.util import create_dataset_tag
  from ray.data.block import Block, BlockMetadata
  from ray.data.iterator import DataIterator
  from ray.types import ObjectRef
  from ray.util.debug import log_once
  from ray.util.scheduling_strategies import NodeAffinitySchedulingStrategy
label_desc: Use image node_id 4 for calling the StreamSplitDataIterator obj's underlying member method code with example usage: obj.stats() and returns: summary