spark了解mysql_Spark讀取數據庫(Mysql)的四種方式講解

目前

一、不指定查詢條件

這個方式鏈接MySql的函數原型是:

我們只需要提供Driver的url,需要查詢的表名,以及連接表相關屬性properties。下面是具體例子:

我們運行上面的程序,可以看到df.rdd.partitions.size輸出結果是1,這個結果的含義是iteblog表的所有數據都是由RDD的一個分區處理的,所以說,如果你這個表很大,很可能會出現OOM

這種方式在數據量大的時候不建議使用。

aHR0cDovL3NvdXJjZS5pdGVibG9nLmNvbS9waWMvU3BhcmtfTXlzcWwucG5nLXdlYnA=

如果想及時了解iteblog_hadoop

二、指定數據庫字段的范圍

這種方式就是通過指定數據庫中某個字段的范圍,但是遺憾的是,這個字段必須是數字,來看看這個函數的函數原型:

前兩個字段的含義和方法一類似。columnName就是需要分區的字段,這個字段在數據庫中的類型必須是數字;lowerBound就是分區的下界;upperBound就是分區的上界;numPartitions是分區的個數。同樣,我們也來看看如何使用:

這個方法可以將iteblog表的數據分布到RDD的幾個分區中,分區的數量由numPartitions參數決定,在理想情況下,每個分區處理相同數量的數據,我們在使用的時候不建議將這個值設置的比較大,因為這可能導致數據庫掛掉!但是根據前面介紹,這個函數的缺點就是只能使用整形數據字段作為分區關鍵字。

這個函數在極端情況下,也就是設置將numPartitions設置為1,其含義和第一種方式一致。

三、根據任意字段進行分區

基於前面兩種方法的限制,

這個函數相比第一種方式多了predicates參數,我們可以通過這個參數設置分區的依據,來看看例子:

最后rdd的分區數量就等於predicates.length。

四、通過load獲取

Spark還提供通過load的方式來讀取數據。

options函數支持url、driver、dbtable、partitionColumn、lowerBound、upperBound以及numPartitions選項,細心的同學肯定發現這個和方法二的參數一致。是的,其內部實現原理部分和方法二大體一致。同時load方法還支持json、orc等數據源的讀取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值