0

5 노드 클러스터가 있습니다. pyspark를 사용하여 일부 etl 작업을 수행하고 출력을 마루 파일에 쓰는 데이터 프레임에 100k csv 파일을로드하고 있습니다. 데이터 프레임을로드 할 때 각 Executor가 20k 레코드를 처리하는 모든 Executor간에 DataSet을 어떻게 균등하게 나눌 수 있습니까?pyspark 모든 실행자에 균일하게 부하 분산

+0

당신은 사용할 수 있습니다에게 발생할 수 있음을 염두에 두어야 할 '재분할 (5)'. – philantrovert

답변

0

가능한 경우 입력 데이터가 작은 파일로 분할되어 있는지 확인하십시오. 그런 식으로 각 실행 프로그램은 단일 파일을 읽고 처리합니다. 당신이 입력 파일을 수정할 수 없습니다 경우

, 당신은 df.repartition(5)를 호출하지만 비싼 셔플 동작

+0

다시 파티션을 추가하는 것은 여러분이 말한 것처럼 더 오래 걸립니다. 데이터가 5 개 노드 모두에 고르게 분산되면 프로세스가 더 빨리 완료 될 것이라고 생각했습니다. df = sqlContext.read.format ('com.databricks.spark.csv'). load ("/ dwo_poc/rows.csv") dz = df.repartition (5) dz.show (100) – srini

+0

그래서 다시 파티를하지 않는 것이 좋습니다. 셔플 비용은 병렬 처리의 이점보다 비싸고 부하를 균등하게 분배하는 것처럼 보입니다. 이해가 잘못되면 저를 고쳐주십시오. – srini

+0

모두에게 맞는 대답은 하나도 없습니다. 작업 부하에 가장 잘 맞는 것이 무엇인지 확인하고 시도하는 것이 가장 좋습니다. – lev