docs: def fromrdd(rdd, nrecords=None, shape=None, index=None, labels=None, dtype=None, ordered=False):
      """
      Load series data from a Spark RDD.
  
      Assumes keys are tuples with increasing and unique indices,
      and values are 1d ndarrays. Will try to infer properties
      that are not explicitly provided.
  
      Parameters
      ----------
      rdd : SparkRDD
          An RDD containing series data.
  
      shape : tuple or array, optional, default = None
          Total shape of data (if provided will avoid check).
  
      nrecords : int, optional, default = None
          Number of records (if provided will avoid check).
  
      index : array, optional, default = None
          Index for records, if not provided will use (0, 1, ...)
  
      labels : array, optional, default = None
          Labels for records. If provided, should have shape of shape[:-1].
  
      dtype : string, default = None
          Data numerical type (if provided will avoid check)
  
      ordered : boolean, optional, default = False
          Whether or not the rdd is ordered by key
      """
      from .series import Series
      from bolt.spark.array import BoltArraySpark
  
      if index is None or dtype is None:
          item = rdd.values().first()
  
      if index is None:
          index = range(len(item))
  
      if dtype is None:
          dtype = item.dtype
  
      if nrecords is None and shape is not None:
          nrecords = prod(shape[:-1])
  
      if nrecords is None:
          nrecords = rdd.count()
  
      if shape is None:
          shape = (nrecords, asarray(index).shape[0])
  
      def process_keys(record):
          k, v = record
          if isinstance(k, int):
              k = (k,)
          return k, v
  
      values = BoltArraySpark(rdd.map(process_keys), shape=shape, dtype=dtype, split=len(shape)-1, ordered=ordered)
      return Series(values, index=index, labels=labels)