spark: jdbc parallelism

yozzum·2022년 3월 22일
0

Spark

목록 보기
12/21

EMR Zeppelin에서 Spark를 실행해서 jdbc를 통해 데이터베이스(Redshift) 데이터를 병렬로 가지고 오는 방법

Spark에서 제공하는 partitionColumn, lowerBound, upperBound, numPartitions 파라미터를 사용해서 JDBC read 작업 시 병렬 처리를 하도록 요청할 수 있음.

  • partitionColumn: 파티션을 적용할 컬럼 이름
  • lowerBound: 파티션 범위의 최소값
  • upperBound: 파티션 범위의 최대값
  • numPartitions: 파티션 개수

샘플 코드

df = spark.read.format("jdbc").option("driver", jdbc_driver_name)\
    .option("url", db_url).option("dbtable", table_name)\
    .option("user", db_username).option("password",db_password)\
    .option('partitionColumn','event_id')\
    .option('lowerBound','1').option('upperBound','200')\
    .option('numPartitions','8').load()

주의사항

  • "partitionColumn" 옵션으로 지정되는 컬럼은 numeric, date, timestamp 형식의 컬럼이어야 함.
  • "query" 옵션은 "partitionColumn" 옵션과 같이 사용할 수 없음.
  • "numPartitions" 옵션 값을 너무 크게 지정하는 경우 외부 database 시스템에(이 경우 redshift) 손상을 줄 수 있음.

reference
https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html

profile
yozzum

0개의 댓글