pyspark读取数据库性能优化

当数据量很大时,读取方式

dbtable写sql语句

dbtable和query配置不能同时存在,选一种即可。里面都可以直接写sql语句

python 复制代码
jdbcDF = spark.read.format("jdbc")\
    .option("driver",driver)\
    .option("url",url)\
    .option("dbtable","(select * from my_table where class='01' and sex='M' )")\
    .option("user",user)\
    .option("password",password)\
		.load().select("org_code","operate_id")

如果dbtable是一个表,如果load()后进行where和select,都会把整张表加载进来,耗内存。直接写sql语句比较好。

并行方式读取数据库

一般来说,默认读数据库,numPartition是1。

以下代码使得读取数据库并行读是10。

python 复制代码
jdbcDF = spark.read.format("jdbc")\
    .option("driver",driver)\
    .option("url",url)\
    .option("dbtable","(select * from my_table where class='01' and sex='F' )")\
    .option("user",user)\
    .option("password",password)\
		.option("numPartitions",10)\
		.option("partitionColumn","id")\
		.option("lowerBound",0)\
		.option("upperBound",100000)
		.load().select("org_code","operate_id")

numPartitions是设置的最大分区数。(单独设置这一选项,没有设置partitionColumn,lowerBound,upperBound,我怎么试实际运行numPartitions值都是1。大概是spark不知道怎么分割分区)

partitionColumn,lowerBound,upperBound这三个选项必须同时设置。(upperBound-lowerBound)/numPartitions是步长。即使数据内容低于lowerBound,或高于upperBound,依然会把所有数据都加载进来。

比如设置partitionColumn为id列,lowerBound为100,upperBound为400,numPartitions为3,实际内容有小于100的,也有大于300的。

那么第一个分区是低于200的,第二个分区是[200,300),第三个分区是大于等于300的

partitionColumn列的值必须是numeric, date, 或 timestamp类型的。

如果是date类型,可以写.option("lowerBound","2023-01-01")

如果是timestamp类型,可以写.option("lowerBound","2023-01-01 00:00:00")

相关推荐
0***863314 分钟前
SQL Server2019安装步骤+使用+解决部分报错+卸载(超详细 附下载链接)
javascript·数据库·ui
wstcl14 分钟前
通过EF Core将Sql server数据表移植到MySql
数据库·mysql·sql server·efcore
聪聪那年2222 分钟前
Oracle 11g windows 10安装与卸载
数据库·oracle
前端之虎陈随易37 分钟前
MoonBit内置数据结构详解
数据结构·数据库·redis
小二·1 小时前
Spring框架入门:TX 声明式事务详解
java·数据库·spring
万邦科技Lafite1 小时前
一键获取淘宝店铺所有商品信息,实时监控商品数据
开发语言·数据库·python·api·开放api·电商开放平台·淘宝开放平台
SUPER52661 小时前
运维hbase服务重启,导致应用查询异常 hbase:meta
运维·数据库·hbase
烤麻辣烫1 小时前
黑马程序员苍穹外卖后端概览
xml·java·数据库·spring·intellij-idea
点灯小铭2 小时前
基于单片机的智能药物盒设计与实现
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
非鱼feiyu2 小时前
自关联数据表查询优化实践:以 Django + 递归 CTE 构建树结构为例
数据库·后端·django