2017-11-13 9 views
0

나는 각 레코드는 int이며 RDD 가지고 : 나는 할 필요가 일괄 적으로이 RDD를 분할스파크. 배치로 분할 RDD

[0,1,2,3,4,5,6,7,8] 

합니다. 나는.

  1. 사용 ZipWithIndex :

    [[0,1,2], [3,4,5], [6,7,8]] 
    

    이 그러나, 나는 몇 일 지난 의아해하고 다음과 같은 솔루션을 제외하고 아무것도 찾을 수없는, 사소한 소리 : 각 요소 요소의 고정 된 크기 목록 또 다른 RDD을 지도()를 사용하여이 RDD를 통해

    [0,1,2,3,4,5] -> [(0, 0),(1, 1),(2, 2),(3, 3),(4, 4),(5, 5)]

  2. 반복 처리를 색인 전압 계산 : RDD에서 레코드를 열거하는 X 생성 인덱스 index = int(index/batchSize)

    [1,2,3,4,5,6] -> [(0, 0),(0, 1),(0, 2),(1, 3),(1, 4),(1, 5)]

  3. 다음 그룹 등을들 수있다.

    [(0, [0,1,2]), (1, [3,4,5])]

이 내가 필요한 걸 얻을 것이다, 그러나 여기에서 그룹을 사용하지 않습니다. 일반 맵 축소 또는 Apache Crunch와 같은 추상화를 사용하는 경우는 간단합니다. 하지만 무거운 그룹을 사용하지 않고 Spark에서 비슷한 결과를 산출하는 방법이 있습니까?

+0

a) 여러 개의 필터를 적용 할 수 있습니다. b) 사용자 정의 파티션 도구를 사용하고 각 파티션에서 RDD를 만듭니다. 나는 고정 된 크기의 RDD가 필요한 이유를 상상할 수는 없지만. – khachik

+0

@khachik '다중 필터 적용'및 '맞춤식 파티셔 구현'에 대해 자세히 설명해 주시겠습니까? 고정 크기의 RDD가 필요하지 않습니다. 레코드 배열 (배치)이되도록 RDD의 각 레코드가 필요합니다. 이것은 하나의 레코드가 아니라 레코드의 배치를 소비하고 예측의 일괄 처리를 반환하는 수학 모델을 가지고 있기 때문에 필요합니다. – Dmitry

답변

0

고정 크기 RDD가 필요한 이유를 명확하게 설명하지 못했습니다. 더 나은 솔루션이 될 수 있지만, 질문에 답하기 위해 다음 옵션이 표시됩니다.
1) 항목 및 배치 크기의 수를 기반으로 필터를 구현합니다. 예를 들어 원본 RDD에 1000 개의 항목이 있고 10 개의 배치로 분할하려는 경우 10 개의 필터를 적용하게됩니다. 첫 번째 항목은 인덱스가 [0, 99]이고 두 번째 항목이 [100, 199] 그리고 또 다른 한사람도. 각 필터를 적용한 후에는 하나의 RDD가 있습니다. 원래 RDD는 필터링 전에 캐시 될 수 있습니다. 장점 : 각 결과 RDD는 개별적으로 처리 될 수 있으므로 한 노드에 완전히 할당 할 필요가 없습니다. 단점 :이 접근법은 배치 수와 함께 느려집니다.
2) 논리적으로는 필터와 유사하지만 여기서는 설명 된대로 인덱스 (키)를 기반으로하는 파티션 ID를 반환하는 사용자 지정 파티션 도구를 구현합니다. Custom partitioner for equally sized partitions. 장점 : 필터보다 빠릅니다. 단점 : 각 파티션은 하나의 노드에 맞아야합니다.
3) 원본 RDD의 순서가 중요하지 않고 대략 똑같이 청크 할 필요가있는 경우 여기에서 설명 된대로 합체/재분할 할 수 있습니다. https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-rdd-partitions.html

+0

자세한 설명을 주셔서 감사합니다. 좀 더 배경을 알려 드리겠습니다. 필자는 입력으로 최대 1K 레코드를 사용하는 모델을 학습하는 컴퓨터를 보유하고 있으며 일부 마법을 수행하고 같은 수의 레코드를 반환합니다. 이 모델을 사용하여 RDD의 모든 레코드를 '점수 매기기'만하면됩니다. 그래서 기본적으로 이것이 원본 RDD를 청크로 분할해야하는 이유입니다. 각 청크는 1000 개 이하의 레코드를 포함해야합니다. 그것이 스파크 패러다임에 맞지 않는 것입니까?나는 대부분 Crunch/MapReduce로 일해 왔으며 거기에는 그런 문제가 없다. 미리 감사드립니다. – Dmitry