天天看點

Databricks 第3篇:pyspark.sql 通過JDBC連接配接資料庫

Databricks Runtime 包含Azure SQL 資料庫的 JDBC 驅動程式,本文介紹如何使用資料幀 API 連接配接到使用 JDBC 的 SQL 資料庫,通過 JDBC 接口進行的讀取操作和更新操作。

在Databricks的Notebook中,spark是Databricks内置的一個SparkSession,可以通過該SparkSession來建立DataFrame、引用DataFrameReader和DataFrameWriter等。

一,建立JDBC URL

本文适用Python語言和JDBC驅動程式來連接配接Azure SQL Database,  

jdbcHostname = "Azure SQL Database"
jdbcDatabase = "db_name"
jdbcPort = 1433
jdbcUsername="user_name"
jdbcPassword="user_password"

jdbcUrl = "jdbc:sqlserver://{0}:{1};database={2}".format(jdbcHostname, jdbcPort, jdbcDatabase)
connectionProperties = {
  "user" : jdbcUsername,
  "password" : jdbcPassword,
  "driver" : "com.microsoft.sqlserver.jdbc.SQLServerDriver"
}      

二,把查詢向下推送到資料庫引擎

可把整個查詢或表向下推送到資料庫,且隻傳回結果。

table

 參數辨別要讀取的 JDBC 表。

spark.read.jdbc(url, table, column=None, lowerBound=None, upperBound=None, numPartitions=None, predicates=None, properties=None)      

參數注釋:

  • url:JDBC URL
  • table:表名或查詢
  • column、numPartitions、lowerBound和upperBound:用于指定分區的列名,分區的數量,分區的列的最小值和最大值
  • predicates:謂詞,用于對資料進行過濾,類似于Where子句
  • properties:JDBC資料庫連接配接參數的字典

1,向下推送表

如果把table設定為表名,那麼表示查詢整個表。

pushdown_query = "table_name"
df = spark.read.jdbc(url=jdbcUrl, table=pushdown_query, properties=connectionProperties)
display(df)      

對查詢的結果進行投影和過濾:

spark.read.jdbc(jdbcUrl, table=pushdown_query, connectionProperties).select("carat", "cut", "price").where("cut = 'Good'")      

2,向下推送查詢

如果向下推送查詢,那麼需要采用下方的格式:(query) data_alias

pushdown_query = "(select * from employees where emp_no < 10008) emp_alias"
df = spark.read.jdbc(url=jdbcUrl, table=pushdown_query, properties=connectionProperties)
display(df)      

三,向下推送更新

通過JDBC,把DataFrame的内容存儲到外部資料表中: 

spark.write.jdbc(url, table, mode=None, properties=None)      
  • url:JDBC Url
  • table:外部資料庫的表名
  • mode:資料更新的模式,append、overwrite、ignore、error(預設,如果資料存在,抛出異常)

參考文檔:

作者

:悅光陰

出處

:http://www.cnblogs.com/ljhdo/

本文版權歸作者和部落格園所有,歡迎轉載,但未經作者同意,必須保留此段聲明,且在文章頁面醒目位置顯示原文連接配接,否則保留追究法律責任的權利。

繼續閱讀