【问题标题】:JDBC databricks to databricks connectionJDBC 数据块到数据块的连接
【发布时间】:2021-09-22 16:11:26
【问题描述】:

我希望从不同的数据块实例连接到一个数据块实例中的增量湖。我已经从下载page 下载了 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 或数据湖 v1/v2)
  • 文件存储在dbfs中
  • 感觉更好的解决方案是迁移到数据湖
  • 我在一家公司工作,但没有选择这样做。

标签: python jdbc pyspark databricks azure-databricks


【解决方案1】:

如果你想这样做(真的不推荐),那么你只需要将这个库上传到 DBFS,并将它附加到cluster via UI or the init script。之后,驱动程序和执行程序都可以使用它。

但实际上,据我了解,您的数据存储在 DBFS 的默认位置(所谓的 DBFS 根目录)。但不建议将数据存储在 DBFS Root 中,文档中指出了这一点:

写入挂载点路径 (/mnt) 的数据存储在 DBFS 根目录之外。即使 DBFS 根是可写的,Databricks 建议您将数据存储在挂载的对象存储中而不是 DBFS 根中DBFS 根不适用于生产客户数据

因此您需要在现有存储帐户中创建一个单独的存储帐户或容器,并且mount it to the Databricks workspace - 这可以对多个工作区进行,这样您将解决多个工作区之间的数据共享问题。这是在任何云中部署 Databricks 的标准建议。

【讨论】:

  • 只是为了确认一下,数据存储在安装在数据块中的存储帐户中。我无权将该存储位置安装到我的其他工作区。我尝试将库上传到集群,但这不起作用。由于它是驱动程序,我认为这样做不是正确的选择。
  • 是否驱动无关紧要。我真的建议找到一种方法将您的存储安装到另一个工作区
  • 如果我能做到这一点,我愿意,我在一家公司工作,没有能力装载这个存储帐户。我正在用我所拥有的做到最好!我尝试了您的建议,但它说 java.sql.SQLException: 没有合适的驱动程序我可以在语句中指定驱动程序,但我尝试了很多变体,它总是出错 java.lang.ClassNotFoundException
猜你喜欢
  • 1970-01-01
  • 2022-07-07
  • 2022-12-11
  • 2015-04-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 2018-07-29
  • 1970-01-01
相关资源
最近更新 更多