簡體   English   中英

JDBC databricks 到 databricks 連接

[英]JDBC databricks to databricks connection

我希望從不同的數據塊實例連接到一個數據塊實例中的三角洲湖。 我已經從下載頁面下載了 sparksimba jar。 當我使用以下代碼時:

result = spark.read.format("jdbc").option('user', 'token').option('password', <password>).option('query', query).option("url", <url>).option('driver','com.simba.spark.jdbc42.Driver').load()

我收到以下錯誤:

Py4JJavaError: An error occurred while calling o287.load.: java.lang.ClassNotFoundException: com.simba.spark.jdbc42.Driver

從周圍閱讀看來,我需要注冊驅動程序類路徑,但我找不到可行的方法。

我嘗試了以下代碼,但我的 databricks env 中不存在 bin/pyspark 目錄:

%sh bin/pyspark --driver-class-path $/dbfs/driver/simbaspark/simbaspark.jar --jars /dbfs/driver/simbaspark/simbaspark.jar

我也試過:

java -jar /dbfs/driver/simbaspark/simbaspark.jar

但我得到了這個錯誤:沒有主要清單屬性,在 dbfs/driver/simbaspark/simbaspark

如果你想這樣做(真的不推薦),那么你只需要將這個庫上傳到 DBFS,並通過 UI 或 init script將它附加到集群 之后它將可供驅動程序和執行程序使用。

但實際上,據我所知,您的數據存儲在 DBFS 上的默認位置(所謂的 DBFS 根)。 但是不建議將數據存儲在 DBFS Root 中,文檔中指出了這一點:

寫入安裝點路徑 ( /mnt ) 的數據存儲在 DBFS 根目錄之外。 即使 DBFS 根是可寫的,Databricks 還是建議您將數據存儲在掛載的對象存儲中,而不是存儲在 DBFS 根中 DBFS 根不適用於生產客戶數據

所以你需要在現有的存儲帳戶中創建一個單獨的存儲帳戶或容器,並將其掛載到Databricks工作區——這可以對多個工作區進行,這樣你就可以解決多個工作區之間的數據共享問題。 這是在任何雲中部署 Databricks 的標准建議。

這是我使用的示例代碼塊(希望有幫助)

hostURL = "jdbc:mysql://xxxx.mysql.database.azure.com:3306/acme_dbuseSSL=true&requireSL=false"
databaseName = "acme_db"
tableName = "01_dim_customers"
userName = "xxxadmin@xxxmysql"
password = "xxxxxx"


df = (
   spark.read
        .format("jdbc") 
        .option("url", f"{hostURL}") 
        .option("databaseName", f"{databaseName}")
        .option("dbTable", f"{tableName}") 
        .option("user", f"{userName}") 
        .option("password", f"{password}") 
        .option("ssl", True) 
        .load() 
)

display(df)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM