spark: jdbc parallelism


EMR ZeppelinでSparkを実行し、jdbcを介してデータベースデータを並列にインポートする方法
Sparkが提供するPartitionColumn、LowerBound、Upbound、およびNumPartitionsパラメータを使用して、JDBC読み取り操作時に並列処理を要求できます.
  • partitionColumn:適用パーティションのカラム名
  • LowerBound:パーティション範囲の最小値
  • Upper Bound:パーティション範囲の最大値
  • 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」オプションで指定した列は、数値、日付、タイムスタンプ形式の列でなければなりません.
  • 「query」オプションは「partionColumn」オプションと併用できません.
  • 指定した「numPartitions」オプションの値が大きすぎると、外部データベースシステムが破損する可能性があります(この場合はredshift).
  • reference
    https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html