Spark SQL:JDBC資料來源複雜綜合案例實戰
阿新 • • 發佈:2018-12-15
一、JDBC資料來源實戰
-
Spark SQL支援使用JDBC從關係型資料庫(比如MySQL)中讀取資料。讀取的資料,依然由DataFrame表示,可以很方便地使用Spark Core提供的各種運算元進行處理。
-
這裡有一個經驗之談,實際上用Spark SQL處理JDBC中的資料是非常有用的。比如說,你的MySQL業務資料庫中,有大量的資料,比如1000萬,然後,你現在需要編寫一個程式,對線上的髒資料某種複雜業務邏輯的處理,甚至複雜到可能涉及到要用Spark SQL反覆查詢Hive中的資料,來進行關聯處理。
-
那麼此時,用Spark SQL來通過JDBC資料來源,載入MySQL中的資料,然後通過各種運算元進行處理,是最好的選擇。因為Spark是分散式的計算框架,對於1000萬資料,肯定是分散式處理的。而如果你自己手工編寫一個Java程式,那麼不好意思,你只能分批次處理了,先處理2萬條,再處理2萬條,可能執行完你的Java程式,已經是幾天以後的事情了。
二、 JDBC資料來源實戰
Java版本 Map<String, String> options = new HashMap<String, String>(); options.put("url", "jdbc:mysql://spark1:3306/testdb"); options.put("dbtable", "students"); DataFrame jdbcDF = sqlContext.read().format("jdbc"). options(options).load(); Scala版本 val jdbcDF = sqlContext.read.format("jdbc").options( Map("url" -> "jdbc:mysql://spark1:3306/testdb", "dbtable" -> "students")).load() 案例:查詢分數大於80分的學生資訊 grant all on testdb.* to ''@'spark1' with grant option; flush privileges;