spark

Repartiotion 방법

코드모헨 2024. 2. 16. 16:53

https://code-lib.tistory.com/13

 

Spark partition 이해하기

스파크에서 분산 병렬처리를 위해서 Partition에 대한 이해는 필수 스파크 작업의 가장작은 단위는 task다 그리고 task는 1개의partition이다 1 task == 1 partition task는 core에 할당되고 이 core들의 집합은 1

code-lib.tistory.com

partition이해하기에서 추가적인 설명을 덧붙이고자 한다.


1. spark.default.parallelism VS spark.sql.shuffle.partitions

 

spark.default.parallelism이란?

join, reduceByKey 같이 RDD에서 적용되는 파티션을 다룰때 사용된다.

오직 RDD단에만 적용된다 Dataframe 혹은 Datasets에는 적용이 안된다.

 

spark.sql.shuffle.partitions이란?

shuffle partition을 정하는 기본 옵션이며 join, aggregation 등 wide transformation을 할때 사용되며

Dataframe 혹은 Dataset 위서 적용된다.

 


2. repartition의 방식

출처: https://sparkbyexamples.com/spark/spark-partitioning-understanding/

 

이 글에서는 round robin을 이용해 partitioning을 하는 방법과 hashpartitioner를 이용해 하는 repartition의 차이를 설명하겠다.

 

1번의 방식은 다음과 같은 방식으로 진행된다.

df.repartition(100)

이런 방식으로 할 경우 1번의 round robin을 이용한 partitioning으로 작동된다.

하지만 column을 기준으로 partitioning을 한다면 

df.repartition(col("column name"))

hash partitioner을 이용한 partitioning이 진행된다.

 

Hash Partitioner

키 기반의 파티셔닝 방식으로 각 데이터 항목의 키에 해시 함수를 적용하고 이 해시 값을 통해 파티션에 할당한다.

주 목적은 키의 분포가 균일할 경우 데이터를 균등하게 분배하는데에 있다.

특히 key-value 쌍 을 처리할 때 유용하다.

 

Round robin partitioning

순차적으로 데이터 항목을 파티션에 순서대로 할당한다.

파티션에 배치할 때 특정한 순서를 따르지 않기 때문에 동일한 키를 가진 데이터가 서로 다른 파티션에 위치할 수 있다.

데이터를 균등하게 분대하는 상황에서는 유용하지만, 키 기반의 연산을 수행할 때는 부적절하다.

 


Reference

https://sparkbyexamples.com/spark/spark-partitioning-understanding/

https://www.thecodersstop.com/spark/spark-partitions-with-coalesce-and-repartition-hash-range-round-robin/

https://spark.apache.org/docs/latest/configuration.html

'spark' 카테고리의 다른 글

spark 와 db연동 하기  (0) 2025.01.22
spark memory 관리  (0) 2024.02.27
Spark partition 이해하기  (1) 2024.02.16
자주사용되는 spark config  (0) 2024.02.13
Spark 설치하기 in Linux - ubuntu  (0) 2023.12.22