2017-10-04 2 views
1

hdfs 경로에서 임의의 파일 샘플을 선택하려고합니다. 다음은 와일드 카드와 일치하는 모든 파일을 컴파일하여 내 RDD에 추가하는 코드 스 니펫입니다.rdd takeSample에서 스파크 작업이 무기한 중지됨

PATH_TO_RAW_DATA = "hdfs:/user/myname/documents/d*" 
tf = sc.binaryFiles(PATH_TO_RAW_DATA, 100000) 

이것은 ~ 5000 개 파일이 들어 나는, 임의의 하위 충분한 위 RDD의를 선택 (100 개) 파일을 말하고 싶은

제대로 컴파일합니다.

테 다음 코드는 내가이 일을 사용하고 무엇을 :

PATH_TO_RAW_DATA = "hdfs:/user/myname/documents/d*" 
tf = sc.binaryFiles(PATH_TO_RAW_DATA, 100000) 
tf = tf.takeSample(False, 100, seed = 1) 

docs에 따르면,이 원래 RDD 100 개 문서 나에게 RDD를 제공해야합니다.

나는 생각하지만, 오류가 점점 : java.lang.OutOfMemoryError: Java heap space

이 스파크/Pyspark의 버그 또는 내가 잘못이 기능을 사용하고?

답변

0

데이터가 100 만 개 파티션을 만드는 이유가없는 매우 큰 경우를 제외하고 내가 병렬에게

 tf = sc.binaryFiles(PATH_TO_RAW_DATA, 100000) 

을 줄이기 위해 제안 첫째. 파티션이 너무 많으면 생산성이 떨어집니다.

드라이버 메모리를 늘리면 java.lang.OutOfMemoryError가 발생합니다. takeSample이 드라이버에 100 개의 항목을 가져올 수 없기 때문에 Java 힙 공간이 가장 많이 사용됩니다. 따라서 드라이버 메모리를 늘리면 문제가 해결 될 수 있습니다. 그렇지 않으면 작은 샘플을 가져 가려하지만 100 대신 10을 사용하면 작동하는지 확인하십시오.