Spark SQL:JDBC資料來源複雜綜合案例實戰

豐澤發表於2018-09-28

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

Git程式碼連結

相關文章