![](/img/trans.png)
[英]How can access Scala JDBC connection in Python Notebook ---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.