Spark讀JDBC提前過濾資料

2021-08-13 09:04:19 字數 1106 閱讀 5583

讀取mysql方法見:

有這樣乙個需求,讀取mysql某乙個表某一天資料;

string begintime = day+ " 00:00:00"

; string endtime = day + " 23:59:59"

; datasetjdbctable=spark.read().format("jdbc")

.option("url", propertiesconfig.url)

.option("dbtable",tablename)

.option("user",propertiesconfig.username)

.option("password",propertiesconfig.password).load().filter("create_time between '"+begintime+"' and '"+endtime+"'");

發現spark是把所有該tablename所有資料load進spark再filter,速率很慢.

所以想,是否提前過濾, 終於找到方法:

string tablename= "(select * from device_info where create_time between '"+ begintime + "' and '" + endtime + "' ) as device_time_filter"

; datasetjdbctable=spark.read().format("jdbc")

.option("url", propertiesconfig.url)

.option("dbtable",tablename)

.option("user",propertiesconfig.username)

.option("password",propertiesconfig.password).load().

只要在該mysql表的create_time建index,效率快很多.

原理就是先從mysql 先過濾讀device_info 張表重新命名為device_time_filter.

JDBC 查詢(讀操作)資料庫

註冊mysql的驅動 獲得乙個連線 建立乙個查詢 處理結果集 關閉連線 class.forname com.mysql.jdbc.driver connection conn drivermanager.getconnection db url,user,pass preparedstatement...

虛IP解決AlWaysON讀庫伺服器過保替換

公司核心交易資料庫,使用sql 2012 alwayson的1主4從,有2臺 8.14,8.15 從庫伺服器,已經使用3年多,過保替換,新買的2臺伺服器已經安裝好,一開始方案如下 伺服器 8.14 替換方案 1,需提前修改程式連線8.14的配置和dbms,改成8.15伺服器並重啟相關服務 2,監控幾...

讀《利用Python進行資料分析》栽過的那些坑

注意,這篇文章不是對文章的解釋,也不是什麼分析,而是書中遇到的一些坑和書中一些沒有說明的地方的補充 安裝中的那些坑 其中我還嘗試過直接安裝ipython等等各種方式,就不多贅述了最終終於可以使用了 from future import division 匯入python未來支援的語言特徵divisi...