def run(self, data_rdd: RDD, query_rdd: RDD, n_dim: int) -> RDD: # type: ignore empty_result_rdd = query_rdd.map(lambda idx_coords: (idx_coords[0], 0)) data_rdd = data_rdd.map( lambda idx_coords: ((), idx_coords[1], (DATA, idx_coords[0])) ) query_rdd = query_rdd.map( lambda idx_coords: ((), idx_coords[1], (QUERY, idx_coords[0])) ) rdd = data_rdd.union(query_rdd) for _ in range(n_dim): rdd = self.assign_next_label(rdd=rdd) # type: ignore rdd = empty_result_rdd.union(self.get_results_by_label(rdd)) # type: ignore rdd = self.aggregate_results_by_query(rdd).sortByKey() # type: ignore return rdd