2016-08-23 4 views
0

아래 코드 블록 간의 성능 차이는 무엇입니까?스파크 flatMapToPair 대 [필터 +지도 투 페어]

1.FlatMapToPair :이 코드 블록은 하나의 변환을 사용하지만 기본적 기술적 따라 진행하도록 RDD이 요소를 허용하지 않는, 빈리스트를 반환 그 안에 필터 조건을 구비한다

rdd.flatMapToPair(
    if (<condition>) 
     return Lists.newArrayList(); 

    return Lists.newArrayList(new Tuple2<>(key, element)); 
) 

2. [Filter + MapToPair]이 코드 블록에는 위의 코드 블록과 동일한 조건을 사용하여 첫 번째 변형을 간단하게 필터링하지만 필터 뒤에 다른 변형 mapToPair를 수행하는 두 가지 변환이 있습니다.

rdd.filter(
    (element) -> <condition> 
).mapToPair(
    (element) -> new Tuple2<>(key, element) 
) 

관계없이 변환의 개수의 코드 블록이 모두 동일하게 수행 할 정도로 지능적 스파크 이러한 두 변형과 마찬가지로 코드 블록 (2)에 더 수행인가?

답변

2

는 사실 그 다음 쓰레기를 초기화해야하기 때문에 첫 번째 경우에 더 수행 스파크

덕분에 각 레코드에 대한 ArrayList 새로운 수집합니다. 많은 수의 레코드에서 상당한 오버 헤드가 발생할 수 있습니다.

그렇지 않은 경우 스파크는 지연 데이터 구조를 사용하기에 "지능적"이며 단일 단계로 셔플을 필요로하지 않는 여러 변환을 결합합니다.

여러 변형을 명시 적으로 병합하는 것이 유용합니다 (초기화 된 개체의 수를 줄이거 나 더 짧은 계보를 유지하는 데 유리하지만).