Spark讀取資料庫(Mysql)的四種方式講解
目前Spark支援四種方式從資料庫中讀取資料,這裡以Mysql為例進行介紹。
一、不指定查詢條件
這個方式連結MySql的函式原型是:
def
jdbc(url :
String, table :
String, properties :
Properties) :
DataFrame
|
我們只需要提供Driver的url,需要查詢的表名,以及連線表相關屬性properties。下面是具體例子:
val
prop =
new
Properties()
val
df =
sqlContext.read.jdbc(url, "iteblog" ,
prop )
println(df.count())
println(df.rdd.partitions.size)
|
我們執行上面的程式,可以看到df.rdd.partitions.size
輸出結果是1,這個結果的含義是iteblog表的所有資料都是由RDD的一個分割槽處理的,所以說,如果你這個表很大,很可能會出現OOM
WARN
TaskSetManager :
Lost task 0.0
in stage 1.0
(TID 14 ,
spark 047219 ) :
java.lang.OutOfMemoryError :
GC overhead limit exceeded at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java : 3380 )
|
這種方式在資料量大的時候不建議使用。
如果想及時瞭解Spark、Hadoop或者Hbase相關的文章,歡迎關注微信公共帳號:iteblog_hadoop
二、指定資料庫欄位的範圍
這種方式就是通過指定資料庫中某個欄位的範圍,但是遺憾的是,這個欄位必須是數字,來看看這個函式的函式原型:
def
jdbc(
url :
String,
table :
String,
columnName :
String,
lowerBound :
Long,
upperBound :
Long,
numPartitions :
Int,
connectionProperties :
Properties) :
|