我正在尝试使用here所述的Spark连接器从Databricks连接到Snowflake。在示例中,使用Snowflake帐户的用户名和密码建立连接。但是,就我而言,我正在通过Okta进行身份验证。我可以看到有一个Okta身份验证选项可以使用Python connector进行连接。但是,我找不到相同的Spark数据框。
对于生产管道部署,是否建议使用Okta身份验证?
有没有人有类似的用例或知道设置?非常感谢您的帮助。
谢谢, 苏里亚
答案 0 :(得分:2)
Snowflake的Spark连接器使用JDBC驱动程序建立与Snowflake的连接,因此Snowflake的连接参数也适用于Spark连接器。
JDBC driver has the "authenticator=externalbrowser"参数启用SSO /联合身份验证。您还可以将此参数设置为Okta终结点,以进行本机Okta身份验证。
以下代码片段演示了如何在利用Snowflake Spark Connector的简单PySpark程序中添加此设置。请注意,您确实需要设置用户名和密码,因为这些是必填参数。您可以根据需要将其设置为虚拟值。
from pyspark import SparkConf, SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.types import *
from pyspark import SparkConf, SparkContext
sc = SparkContext("local", "Simple App")
spark = SQLContext(sc)
spark_conf = SparkConf().setMaster('local').setAppName('repro')
sfOptions = {
"sfURL" : "accountname.eu-central-1.snowflakecomputing.com",
"sfAccount" : "accountname",
"sfUser" : "manuel",
"authenticator" : "externalbrowser",
"sfPassword" : "xxx",
"sfDatabase" : "SANDBOX",
"sfSchema" : "PUBLIC",
"sfWarehouse" : "MANUEL_WH",
"tracing" : "ALL",
}
SNOWFLAKE_SOURCE_NAME = "net.snowflake.spark.snowflake"
df = spark.read.format(SNOWFLAKE_SOURCE_NAME) \
.options(**sfOptions) \
.option("query", "select 1 as my_num union all select 2 as my_num") \
.load()