一、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;
複製程式碼