Spark读取mysql大数据量最佳实践 备忘

受B站,大疆在git上代码泄露影响,公司网络干脆不能登git,也不能登开源中国的码云了 ,所以在CSDN这做做日常记录吧。

至于最佳实践,噱头嘛~~~

Spark读取关系型数据库,官方有API接口,如下:
    ①、SparkSession.read.jdbc(url, table, properties)
    ②、SparkSession.read.jdbc(url, table, columnName, lowerBound, upperBound, numPartitions, connectionProperties)
    ③、SparkSession.read.jdbc(url, table, predicates, connectionProperties)

对于①②,网上有很多例子,也很好理解。但是不能满足我的业务场景,必须要用③来实现。说说我的业务场景

1.用户传连接信息来,可能是mysql,oracle,db2,postgresql中的一种

2.这些表可能数据量最多接近千万,而且没有分库分表也没用于分区的字段,甚至没有id,(我知道这不敢想,但是历史数据,10来年的沉淀确实存在)

难点1.Spark读取关系型数据库,数据都会放一个partation中,至少目前版本是这样,那么千万级别的数据,driver会OOM。

2.因为是用户传来连接信息,事先不知道要连接哪个表,表里有哪些字段

所以研究了下③中参数predicates ,是Array[String]数组,设想能不能用分页,还真成了。以mysql为例,分页用limit

示例

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值