当前位置: 首页 > 知识库问答 >
问题:

从Database ricks连接到Snowflake

羊舌洛华
2023-03-14

使用Database ricks笔记本,我能够从Database ricks连接到“雪花”,并使用“scala”将内容写入Snowflake中的表,但使用“python”无法正常工作。

我在数据砖中添加了这两个库,这有助于在数据砖和雪花之间建立联系:雪花-jdbc-3.6.8火花-snowflake_2.11-2.4.4-spark_2.2

我的目标是使用Databricks(用于机器学习- Spark)并在Databricks和雪花之间来回移动数据。

下面是我尝试将数据帧的内容写入雪花的代码:

  1. 将数据加载到DataFrame
    df1 = spark.read.format('csv').option("header", "true")\
               .option("inferSchema", "true")\
               .load("dbfs:/databricks-datasets/airlines/part-00000")
    display(df1)

我可以看到数据已加载到数据帧中。

    user = dbutils.secrets.get(scope="jdbc", key="snowflake_username")
    password = dbutils.secrets.get(scope="jdbc", key="snowflake_password")
    options = dict(sfUrl="https://***snowflake_username***.snowflakecomputing.com",
                   sfUser=user,
                   sfPassword=password,
                   sfDatabase="my_database",
                   sfSchema="PUBLIC",
                   sfWarehouse="my_warehouse")

    SNOWFLAKE_SOURCE_NAME = "net.snowflake.spark.snowflake"

到目前为止没有错误

    df1.write.format(SNOWFLAKE_SOURCE_NAME) \
        .options(**options) \
        .option("dbtable", "datafromspark") \
          .save()

这导致:

**Error : 
java.sql.SQLException: No suitable driver found for jdbc:snowflake://https://*snowflake_username*.snowflakecomputing.com**

共有2个答案

靳茂
2023-03-14

这实际上工作正常(考虑到允许用户写入模式并稍后从中读取)

import dbutils

# Use secrets DBUtil to get Snowflake credentials.
user = dbutils.secrets.get("snowflake", "xx")
password = dbutils.secrets.get("snowflake", "xy")

# snowflake connection options
options = {
    "sfUrl": "XXXXXXX.snowflakecomputing.com",
    "sfUser": user,
    "sfPassword": password,
    "sfDatabase": "DBX_TEST",
    "sfSchema": "DBX_SCHEMA"
}

# write the dataset to Snowflake
# sparkDF = spark.createDataFrame(...)
sparkDF.write.format("snowflake").options(**options).option("dbtable", "name_table").save()

# Connect to Snowflake and build data frame
df = spark.read.format("net.snowflake.spark.snowflake") \
    .options(**options) \
    .option("query", "select * from name_table") \
    .load()
楚良平
2023-03-14

我发现错误:

在第3步中,无需提及"https://"

sfUrl="https://snowflake_username.snowflakecomputing.com"   # giving an error

sfUrl="snowflake_username.snowflakecomputing.com"          #works fine
 类似资料:
  • 问题内容: 我可以从DOS提示符下成功连接到MySQL,但是当我尝试从cygwin连接时,它会挂起。 怎么了? 问题答案: 假设您具有MySQL的本机Windows版本,(命令提示符)Windows和Windows 之间没有终端仿真不兼容。提示没有出现。 要确认这一点,请键入命令并返回-它可能会起作用,但是命令的提示和回显(您键入的内容)会丢失。 系统属性或in中可能都存在一种解决方法,但是我从来

  • 我正在尝试通过JAVA代码在SAP HANA上使用火花SQL执行查询。在对数据帧对象调用任何操作时,当调用 时,我在代码段下方得到 java.io.NotSerializableException.In,不会引发可序列化异常。 错误堆栈跟踪: 线程“main”org.apache.spark中出现异常。SparkException:位于org.apache.spark.util.ClosureCl

  • 我正在尝试在Linux-Debian 8.11@Virtualbox上设置MSSQL数据库,但无法通过MSSQL MSSQL Server Management Studio连接到它 服务器是可ping的。 VirtualBox中的网络设置: 纯主机网络VirtualBox纯主机以太网适配器 有什么想法吗? 错误日志@服务器 https://pastebin.com/7WGEVg1a

  • 我正在做一个NodeJS项目,似乎使用了非常常见的AWS设置。我的ApiGateway接收调用,触发lambda A,然后这个lambda根据从ApiGate传递的参数触发其他lambda,比如B或C。 Lambda A需要访问MongoDB,为了避免自己运行MongoDB时遇到麻烦,我决定使用mLab。ATM Lambda A正在使用NodeJS驱动程序访问MongoDB。现在,为了不在每次执行

  • 我正在尝试使用同一版本的SolrJ从Java代码连接到运行5.3.1的Solr服务器。我在Eclipse中不断收到一条消息,HttpSolrServer已被弃用,但在任何地方都找不到它已被取代的内容。有人知道我如何使用SolrJ和当前的东西从Java连接到Solr吗?SolrJ文档似乎都表明HttpSolrServer是受支持的方式,但Eclipse对此并不满意。

  • 我遇到了从一个火花运行的AWS EMR集群连接到另一个立即运行的AWS EMR集群的问题。 用python编写的代码是: 通过aws