docs: def read(self, path, ext=None, start=None, stop=None, recursive=False, npartitions=None):
          """
          Sets up Spark RDD across files specified by dataPath on local filesystem.
  
          Returns RDD of <integer file index, string buffer> k/v pairs.
          """
          path = uri_to_path(path)
          files = self.list(path, ext=ext, start=start, stop=stop, recursive=recursive)
  
          nfiles = len(files)
          self.nfiles = nfiles
  
          if spark and isinstance(self.engine, spark):
              npartitions = min(npartitions, nfiles) if npartitions else nfiles
              rdd = self.engine.parallelize(enumerate(files), npartitions)
              return rdd.map(lambda kv: (kv[0], readlocal(kv[1]), kv[1]))
          else:
              return [(k, readlocal(v), v) for k, v in enumerate(files)]