SparkJDBC读写数据库实战
默认的操作
- 代码
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()
- 讲解
上面这种默认情况使用jdbc driver读数据库(如pg库),仅仅会使用一个task读数据,也就是只有一个分区。要证明这一点可以通过两种方式:
- 查看web ui
你会看到只有一个task。 - 通过getNumPartitions方法
你会看到numPartitions=1。int numPartitions = ds.rdd().getNumPartitions();
对数值、日期、时间戳字段分区
spark当然不可能只能用一个task读数据库,这样如果数据库数据量大了,效率将会非常低,官方提供了一些参数,可以控制并发读取数据库任务的数量。
想了解所有的参数,