Apache Spark는 성능 최적화를 위해 다양한 힌트를 제공합니다. 이 힌트들은 쿼리 실행을 최적화하는 데 사용되며, 주로 데이터 파티셔닝과 조인 전략에 활용됩니다. 각 힌트는 특정 시나리오에서 성능을 크게 향상시킬 수 있습니다.


Partitioning

COALESCE

COALESCE는 파티션 수를 줄이는 데 사용됩니다. 많은 파티션을 병합하여 성능 최적화를 도와줍니다.

spark.sql("SELECT /*+ COALESCE(2) */ * FROM my_table").show()
df.hint("COALESCE", 2).show()  # 2개의 파티션으로 병합

REPARTITION

REPARTITION은 데이터를 지정된 수의 파티션으로 재분배하는 데 사용됩니다. 대규모 데이터셋에서 파티션 수를 늘려 병렬 처리 성능을 향상시킬 수 있습니다.

spark.sql("SELECT /*+ REPARTITION(4) */ * FROM my_table").show()
df.hint("REPARTITION", 4).show()  # 4개의 파티션으로 재분배

REPARTITION_BY_RANGE

REPARTITION_BY_RANGE는 특정 컬럼을 기준으로 데이터를 범위별로 파티셔닝합니다. 이를 통해 쿼리 성능을 향상시킬 수 있습니다.

spark.sql("""
  SELECT /*+ REPARTITION_BY_RANGE(3, column) */ * 
  FROM my_table
""").show()

REBALANCE

REBALANCE는 데이터를 균등하게 분배하여 성능을 최적화하는 데 사용됩니다. 파티션 간 데이터 불균형이 있을 때 유용합니다.

spark.sql("SELECT /*+ REBALANCE */ * FROM my_table").show()
df.hint("REBALANCE").show()  # 데이터를 균등하게 재분배

Join

BROADCAST

BROADCAST는 작은 테이블을 각 노드에 복제하여 조인 성능을 최적화합니다.

spark.sql("""
  SELECT /*+ BROADCAST(small_table) */ * 
  FROM large_table JOIN small_table 
  ON large_table.id = small_table.id
""").show()
df1.join(df2.hint("BROADCAST"), "id").show()  # df2를 broadcast하여 조인

MERGE

MERGE는 정렬된 데이터를 기준으로 효율적인 조인을 수행하도록 돕습니다.

spark.sql("""
  SELECT /*+ MERGE(small_table) */ * 
  FROM large_table JOIN small_table 
  ON large_table.id = small_table.id
""").show()
df1.join(df2.hint("MERGE"), "id").show()  # 정렬된 상태로 병합

SHUFFLE_HASH

SHUFFLE_HASH는 해시 기반으로 조인을 수행하도록 합니다. 대규모 데이터를 처리할 때 유리합니다.

spark.sql("""
  SELECT /*+ SHUFFLE_HASH(small_table) */ * 
  FROM large_table JOIN small_table 
  ON large_table.id = small_table.id
""").show()
df1.join(df2.hint("SHUFFLE_HASH"), "id").show()  # 해시 기반 조인 사용

SHUFFLE_REPLICATE_NL

SHUFFLE_REPLICATE_NL은 중첩 루프 조인에서 작은 테이블을 복제하여 큰 테이블과 조인합니다. 복잡한 조인 연산에서 성능을 높입니다.

spark.sql("""
  SELECT /*+ SHUFFLE_REPLICATE_NL(small_table) */ * 
  FROM large_table JOIN small_table 
  ON large_table.id = small_table.id
""").show()
df1.join(df2.hint("SHUFFLE_REPLICATE_NL"), "id").show()  # 중복 데이터 처리 조인

References