2017-09-10 6 views
0

다음 코드 스 니펫은 필터를 병렬로 처리하고 개별 파일을 출력 디렉토리에 기록합니다. 하나의 큰 출력 파일을 얻는 방법이 있습니까?스 플랫을 사용하여 병렬 작업 출력 결합

Array(
     (filter1, outputPathBase + fileName), 
     (filter2, outputPathBase + fileName), 
     (filter3, outputPathBase + fileName) 

    ).par.foreach { 
     case (extract, path) => extract.coalesce(1).write.mode("append").csv(path) 
     } 

고맙습니다.

답변

1

당신은 ParArray

Array 변환이 경우 필요가 없습니다 스파크

val rdd = Array(
     filter1 
     filter2, 
     filter3).reduce(_.union(_)) 

rdd.write.mode("append").csv(path) 

에 의해 각 필터 *의 실행을 병렬화 것이라고 노조 그들에 의해 단일 RDD으로 배열을 줄일 수 있습니다

나는 filter1, filter2filter3

+0

RDD[T]가 미켈 감사 같은 종류의 것을 가정하고있다. 나는 그것을 시도했다. 그러나 총 실행 시간의 차이는 엄청났다. 내가 사용한 접근 방식으로 3 분 만에 처리가 이루어졌고 유니온으로 접근하는 데는 약 18 분이 걸렸습니다. – Bharath

+0

당신은 filter1, filter2 및 filter3이 무엇인지에 대해 더 많은 정보를 공유 할 수 있습니까? – Mikel

+0

병렬 처리가 1 – Mikel