작업 : RDD[Int]
의 거대한 정렬되지 않은 입력 데이터 세트가있는 경우 상위 10 %를 다른 RDD[Int]
으로 반환하십시오.Spark에서 다른 RDD로 정렬되지 않은 RDD의 상위 10 %를 반환하는 효율적인 방법은 무엇입니까?
출력 유형이 RDD[Int]
인 이유는 무엇입니까? 심지어 상위 10 %의 출력 및 배기 드라이버 메모리에 "수집"될대로 내가
sc.makeRDD(input.top(0.1 * input.count()))
호출 할 수있는 이유는 메모리에 맞지 않게 입력이 너무 커서 때문이다.
이 문제는 보통 입력을 모두 입력으로 정렬 한 다음 어떤 종류의 limit()
을 호출하여 처리합니다. 그러나이 경우 실제로는 비효율적이됩니다.
- 적어도 두 번 이상 전체 데이터 집합이 만들어집니다. (하나는 데이터 집합의 크기를 가져오고 나머지는 정렬/...을 포함합니다.)
- 저는 실제로 상위 10 %에 관심이 있으며 나머지 90 %에는 관심이 없습니다.
효율적인 대안이 있습니까?
상위 10 % 기준으로 주문 유형이있는 것 같습니다. 그렇다면 최선의 방법은 모든 것을 정렬 한 다음 '제한'을 사용하는 것입니다. 그렇지 않으면 어떤 데이터가 상위 10 %에 있는지 어떻게 알 수 있습니까? – Shaido
@Shaido, 당연히 종류와 관련된'Ordering'이 있습니다. –
이것은 의미가 없습니다. 당신은 어떤 종류의'주문 (Ordering) '을 원하지만 아직 정렬되지 않은 RDD가 있습니다. 왜 샘플을 샘플링합니까? – eliasah