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 init(cls, eltype, data, kdims, vdims):
      import dask.dataframe as dd
  
      data, dims, extra = PandasInterface.init(
          eltype, data, kdims, vdims
      )
      if not isinstance(data, dd.DataFrame):
          data = dd.from_pandas(
              data, npartitions=cls.default_partitions, sort=False
          )
      kdims = [
          d.name if isinstance(d, Dimension) else d
          for d in dims["kdims"]
      ]
  
      # If a key dimension can be found, speculatively reset index
      # to work around lacking dask support for MultiIndex
      if any(d for d in kdims if d not in data.columns):
          reset = data.reset_index()
          if all(d for d in kdims if d in reset.columns):
              data = reset
      return data, dims, extra
  
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 3 for calling the DaskInterface obj's underlying member method code with example usage: obj.init(cls, eltype, data, kdims, vdims) and returns: data,  dims,  extra