首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >azure :从databricks连接到无服务器的sql池-未能找到数据源: com.databricks.spark.sqldw

azure :从databricks连接到无服务器的sql池-未能找到数据源: com.databricks.spark.sqldw
EN

Stack Overflow用户
提问于 2021-07-28 15:45:54
回答 1查看 1.5K关注 0票数 1

我在蓝色中使用突触。我在无服务器sql池中有数据。我想将数据导入到databricks中的dataframe中。

我得到了以下错误:

代码语言:javascript
复制
Py4JJavaError: An error occurred while calling o568.load.
: java.lang.ClassNotFoundException: Failed to find data source: com.databricks.spark.sqldw. Please find packages at http://spark.apache.org/third-party-projects.html
    at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:656)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:195)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:168)
    at sun.reflect.GeneratedMethodAccessor102.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
    at py4j.Gateway.invoke(Gateway.java:282)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:238)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: com.databricks.spark.sqldw.DefaultSource
...
...
...

我使用的电火花代码是:

代码语言:javascript
复制
spark.conf.set(
  "fs.azure.account.key.adlsAcct.blob.core.windows.net",
  "GVk3234fds2JX/fahOcjig3gNy198yasdhfkjasdyf87HWmDVlx1wLRmu7asdfaP3g==")



sc._jsc.hadoopConfiguration().set(
  "fs.azure.account.key.adlsAcct.blob.core.windows.net",
  "GVk3234fds2JX/fahOcjig3gNy198yasdhfkjasdyf87HWmDVlx1wLRmu7asdfaP3g==")


  
df = spark.read \
.format("com.databricks.spark.sqldw") \
.option("url","jdbc:sqlserver://synapse-myworkspace-ondemand.sql.azuresynapse.net:1433;database=myDB;user=myUser;password=userPass123;encrypt=false;trustServerCertificate=true;hostNameInCertificate=*.sql.azuresynapse.net;loginTimeout=30;") \
.option("tempdir", "wasbs://projects@adlsAcct.dfs.core.windows.net/Lakehouse/tempDir") \
.option("forwardSparkAzureStorageCredentials","true") \
.option("dbtble","tbl_sampledata") \
.load()

我可以证实:

  • 配置防火墙设置,以允许蔚蓝服务连接。
  • 用户可以访问sql无服务器池数据库。
  • 我试过用集成的方法,我得到了同样的结果。

在我看来,这个错误看起来就像databricks找不到com.databricks.spark.sqldw格式,但这可能是一条红鲱鱼。

感谢任何建议和专业知识

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-28 16:52:37

使用Analytics的优点之一是集成,因为存储、数据库、管道、笔记本等各种组件的协同工作比设置独立组件(如Databricks笔记本)要容易一些,在这里您必须编写类似于您的代码,包括hadoopConfiguration等。

从专用SQL池获取数据到Synapse记事本的一个简单方法是使用synapsesql方法。一个简单的例子:

代码语言:javascript
复制
%%spark
// Get the table with synapsesql method and expose as temp view
val df = spark.read.synapsesql("dedi_pool.dbo.someTable")

df.createOrReplaceTempView("someTable")

不幸的是,此方法目前仅在Scala中实现(据我所知),但您可以将数据存储为临时视图,将其公开给SparkSQL和Python:

代码语言:javascript
复制
%%sql
SELECT * FROM someTable;

下面是Python来检索Python中的temp视图:

代码语言:javascript
复制
%%pyspark
## Get the table with synapsesql method and expose as temp view
df = spark.sql("select * from someTable")

df.show()

这是我的结果:

请查看此技术的主要文档这里

对于无服务器的SQL池,我最初感到沮丧的是它没有内置,但是如果您考虑一下,您将使用重复的服务,即使用无服务器引擎来查询底层文件,而使用Apache池来查询占位符/外部表,这实际上是在查询它们的底层文件。因此,您最好直接使用spark.read和任何文件格式(如.csv )引用这些文件。从文档获取的示例

代码语言:javascript
复制
%%pyspark
df = spark.read.load('abfss://users@contosolake.dfs.core.windows.net/NYCTripSmall.parquet', format='parquet')
display(df.limit(10))

我就是这么想的:

然而,这在技术上是可能的,我介绍了这里技术。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68563514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档