我用下麵的代碼使用JDBC連接到databrick默認集群和表解讀pyspark dataframe
url = " jdbc:磚:/ /(空間域):443 /違約;運輸方式= http; ssl = 1; AuthMech = 3; httpPath =(路徑);AuthMech = 3; UID =令牌;PWD = [your_access_token] ' driver_class = ' com.databricks.client.jdbc。司機“#通過查詢MySQL數據庫創建一個DataFrame df_1 = spark.read.format (jdbc) \ .option (“url”, url) \ .option(“司機”,driver_class) \ .option(“數據表”,“my_table2”) \ .load () df_1.show ()
最後df_1 dataframe
名字+——+ | | +——+名字| | |名稱| | | +——+名字
最終結果
+ - - - + | |名稱+——+約翰| | |簡| |鮑勃| +——+
我還測試了代碼
df_2 =火花。sql (select * from my_table2) df_2.show ()
結果dataframe是正確的。請建議。謝謝你!
pyspark.read。jdbc函數數據庫名稱選擇嗎?你能告訴我如何在這個函數給數據庫名稱。我認為數據庫名稱包含在jdbc url選項。
@yu張:
看起來問題第一個代碼片段你提供是不指定正確的查詢從數據庫檢索數據。
當使用jdbc數據源的load()方法,您需要提供一個SQL查詢
數據表選項,獲取你想要的數據加載到DataFrame。
假設你my_table2表包含一列指定名稱的值你列出,您可以修改您的代碼獲取正確的數據如下:
url = " jdbc:磚:/ /(空間域):443 /違約;運輸方式= http; ssl = 1; AuthMech = 3; httpPath =(路徑);AuthMech = 3; UID =令牌;PWD = [your_access_token] ' driver_class = ' com.databricks.client.jdbc。司機“#通過查詢MySQL數據庫創建一個DataFrame df_1 = spark.read.format (jdbc) \ .option (“url”, url) \ .option(“司機”,driver_class) \ .option(“數據表”,“(從my_table2選擇名稱)作為tmp”) \ .load () df_1.show ()
這段代碼通過一個SQL查詢數據表的選項,選擇隻有從你的名字列
my_table2表。結果DataFrame應該包含您期望的數據。
或者,您可以使用火花。sql方法直接執行一個sql查詢數據庫並加載到DataFrame結果,當你在第二個代碼片段:
df_2 =火花。sql (select * from my_table2) df_2.show ()
這段代碼也應該從數據庫檢索正確的數據。