def median(rdd: RDD) -> float: sorted_and_indexed = rdd.sortBy(lambda x: x).zipWithIndex().map(lambda v, k: (k, v)) n = sorted_and_indexed.count() if n % 2 == 1: return sorted_and_indexed.lookup((n-1) / 2)[0] else: v1 = sorted_and_indexed.lookup(n / 2)[0] v2 = sorted_and_indexed.lookup((n / 2) - 1)[0] return (v1 + v2) / 2.0