def uniform(start, end=None, periods=None, freq=None, sc=None):
    """
    Instantiates a uniform DateTimeIndex.

    Either end or periods must be specified.
    
    Parameters
    ----------
        start : string, long (nanos from epoch), or Pandas Timestamp
        end : string, long (nanos from epoch), or Pandas Timestamp
        periods : int
        freq : a frequency object
        sc : SparkContext
    """
    dtmodule = sc._jvm.com.cloudera.sparkts.__getattr__('DateTimeIndex$').__getattr__('MODULE$')
    if freq is None:
        raise ValueError("Missing frequency")
    elif end is None and periods == None:
        raise ValueError("Need an end date or number of periods")
    elif end is not None:
        return DateTimeIndex(dtmodule.uniformFromInterval( \
            datetime_to_nanos(start), datetime_to_nanos(end), freq._jfreq))
    else:
        return DateTimeIndex(dtmodule.uniform( \
            datetime_to_nanos(start), periods, freq._jfreq))