SparkJDBC读写数据库实战

默认的操作

  1. 代码
    val df = spark.read
      .format("jdbc")
      .option("url", "jdbc:postgresql://localhost:5432/testdb")
      .option("user", "username")
      .option("password", "password")
      .option("driver", "org.postgresql.Driver")
      .option("dbtable", "test_table")
      .load()
    
  2. 讲解
    上面这种默认情况使用jdbc driver读数据库(如pg库),仅仅会使用一个task读数据,也就是只有一个分区。要证明这一点可以通过两种方式:
  • 查看web ui
    在这里插入图片描述
    你会看到只有一个task。
  • 通过getNumPartitions方法
    int numPartitions = ds.rdd().getNumPartitions();
    
    你会看到numPartitions=1。

对数值、日期、时间戳字段分区

spark当然不可能只能用一个task读数据库,这样如果数据库数据量大了,效率将会非常低,官方提供了一些参数,可以控制并发读取数据库任务的数量。
想了解所有的参数,

你可能感兴趣的:(Spark最佳实战与性能优化,spark,jdbc,数据库)