2017-03-23 3 views
0

Apache Spark 설명서를 읽은 후 mapPartition 모듈을 실험 해 보았습니다. 다음 코드에서는 함수에서와 같이 초기 RDD를 볼 것으로 예상했습니다. myfunc 값을 인쇄 한 후 반복기를 다시 반환합니다. 그러나 RDD에서 collect을 할 때 그것은 비어 있습니다.pyspark에서 mapPartitions 사용 방법

from pyspark import SparkConf 
from pyspark import SparkContext               

def myfunc(it): 
    print(it.next()) 
    return it 

def fun1(sc): 
    n = 5 
    rdd = sc.parallelize([x for x in range(n+1)], n) 
    print(rdd.mapPartitions(myfunc).collect()) 


if __name__ == "__main__":                 
    conf = SparkConf().setMaster("local[*]")            
    conf = conf.setAppName("TEST2")              
    sc = SparkContext(conf = conf)               
    fun1(sc) 

답변

1

mapPartitions은 여기에 관련이 없습니다. 반복자 (여기 itertools.chain)는 상태 저장이며 한 번만 통과 할 수 있습니다. it.next()으로 전화를 걸면 첫 번째 요소를 읽고 버리고 반환하는 것은 시퀀스의 꼬리입니다.

파티션에 항목이 하나만있는 경우 (하나만 제외하고 모든 경우에 해당) 파티션을 효과적으로 삭제할 수 있습니다.

몇 가지 참고 사항 : 작업은 일반적으로 쓸모가 내부

  • 아무것도 퍼팅은 표준 출력합니다.
  • next을 사용하는 방식은 이식 가능하지 않으며 Python 3에서 사용할 수 없습니다.