class_docstr: The DaskInterface allows a Dataset objects to wrap a dask
  DataFrame object. Using dask allows loading data lazily
  and performing out-of-core operations on the data, making
  it possible to work on datasets larger than memory.
  
  The DaskInterface covers almost the complete API exposed
  by the PandasInterface with two notable exceptions:
  
  1) Sorting is not supported and any attempt at sorting will
     be ignored with an warning.
  2) Dask does not easily support adding a new column to an existing
     dataframe unless it is a scalar, add_dimension will therefore
     error when supplied a non-scalar value.
  4) Not all functions can be easily applied to a dask dataframe so
     some functions applied with aggregate and reduce will not work.
code: def select(cls, dataset, selection_mask=None, **selection):
      df = dataset.data
      if selection_mask is not None:
          return df[selection_mask]
      selection_mask = cls.select_mask(dataset, selection)
      indexed = cls.indexed(dataset, selection)
      df = df if selection_mask is None else df[selection_mask]
      if indexed and len(df) == 1 and len(dataset.vdims) == 1:
          return df[dataset.vdims[0].name].compute().iloc[0]
      return df
  
imports: import sys
  import numpy
  import pandas
  from ..None import util
  from ..dimension import Dimension
  from ..element import Element
  from ..ndmapping import NdMapping, item_check, sorted_context
  from .interface import Interface
  from .pandas import PandasInterface
label_desc: Use image node_id 11 for calling the DaskInterface obj's underlying member method code with example usage: obj.select(cls, dataset, selection_mask) and returns: df, df, df