code: def hosts_to_parts(futures):
      """
      Builds an ordered dict mapping each host to their list
      of parts
      :param futures: list of (worker, part) tuples
      :return:
      """
      w_to_p_map = OrderedDict()
      for w, p in futures:
          host, port = parse_host_port(w)
          host_key = (host, port)
          if host_key not in w_to_p_map:
              w_to_p_map[host_key] = []
          w_to_p_map[host_key].append(p)
      return w_to_p_map
  
file_path: cuml/python/cuml/dask/common/part_utils.py
imports: from cuml.dask.common.utils import parse_host_port
  from dask_cudf.core import Series
  from cuml.internals.safe_imports import gpu_only_import_from
  from dask.dataframe import Series
  from dask.dataframe import DataFrame
  from dask.array.core import Array
  from toolz import first
  from dask.distributed import futures_of, default_client, wait
  from collections.abc import Sequence
  from tornado import gen
  from functools import reduce
  from collections import OrderedDict
  from cuml.internals.safe_imports import cpu_only_import
label_desc: Use image node_id 1 for calling a global function with example usage: hosts_to_parts(futures) and returns: w_to_p_map