2016-09-16 5 views
0

sortByKey와 같은 함수를 호출 할 수있는 컬렉션의 데이터 유형을 이해하는 데 문제가 있습니다. 나는 ListMap (sortByKey를 호출하려고하는 요소를 순서대로 저장하는 데이터 구조를 원한다.)을 가지고있다. 목록 맵의 내용은 키로 처음 n 개의 숫자와 각각의 값으로 1입니다. 목록 맵 대신 무엇을 사용해야합니까?spark에서 OrderedRDD 함수 사용

val l = (1 to 1000).toList 
val d = ListMap(l.map(s=> s -> 1):_*) 
val rdd = sc.parallelize(Seq(d)) 
rdd.collect() 
val sorted = rdd.sortByKey() 
sorted.collect() 

답변

0

ListMap은 필요하지 않습니다.

val rdd: RDD[(Int, Int)] = sc.parallelize((1 to 1000).map(k => (k -> 1)).toSeq) 

rdd.sortByKey().collect() 

또한 현재 무료로 내려면 Ordering을 필요 : 귀하의 경우 우리가 RDD[(Int, Int)]이 어디에 당신이 필요로 RDD[(K, V)]의 형태로, 키와 값의 기본 튜플이있는 RDD입니다 암시 적으로, 유형이 Int 인 프리미티브의 경우. Spark programming guide 가입일

+0

정렬 기능에 대한 입력이 이미 정렬되도록 키가 정렬되도록하려면 ListMap 원인을 사용하고 있습니다. 이 rdd가 정렬 함수에 전달 될 때 정렬되도록하려면 어떻게해야합니까? – user1745995

+0

@user 왜 정렬 된 것을 정렬하고 싶습니까? 따라 와야할지 모르겠다. –

+0

데이터가 네트워크를 통해 이동하기를 원할 때 셔플 읽기 및 셔플 쓰기가 필요합니다. 그러나 나는 실제 정렬을하는 데 시간을 투자하지 않기를 바란다. (사실, 나의 최종 데이터가 정렬되지 않는다면 나는 상관하지 않는다.) 내가 이해하는 것으로부터, spark는 정렬 된 데이터에 대해 O (n) 런타임을 제공하는 tim sort를 사용하므로 정렬하려고하는 데이터를 정렬하려고합니다. – user1745995

0

:

sortByKey가 ([오름차순], [numTasks])의 세트에 호출

(K는, V) K가 구현 순서쌍, 반환 부울 오름차순 인수에 지정된대로 오름차순으로 키 또는 내림차순으로 정렬 된 (K, V) 쌍의 데이터 집합입니다.

따라서 키를 주문할 수있는 PairRDD이 필요합니다. 다른 답변은 예제를 참조하십시오.

1

요구 사항은 매우 간단하다 :

  • 당신은 RDD[(K, V)]이 필요합니다.
  • 주어진 범위에 K에 대해 implicitOrdering이 있어야합니다.

당신이 만든 RDD에는 하나의 요소 만 있기 때문에 예제는 실제로 이해가되지 않습니다. 따라서 실제로는 정렬 할 것이 없습니다. 아마도 다음과 같은 것을 원했을 것입니다.

sc.range(1, 1001).map((_, 1)).sortByKey() 
+0

나는 그것을 시도하고 그것은 작동합니다. 감사! 내 코드 스 니펫 중 어느 부분이 하나의 요소로 만듭니 까? 정렬 알고리즘이 O (n)가 순서대로 저장되어있는 rdd의 결과와 같은 맵을 수행하도록 키가 이미 정렬되어 있는지 확인하고 싶습니다. – user1745995

+0

'Seq (d)'. 당신은'd.toSeq'로 그것을 대체 할 수 있지만 그것은 그렇게 많은 의미가 있습니다. – zero323

관련 문제