通过Okta身份验证使用Databricks Snowflake连接器连接到Snowflake

时间:2020-06-05 16:12:59

标签: python apache-spark pyspark databricks snowflake-cloud-data-platform

我正在尝试使用here所述的Spark连接器从Databricks连接到Snowflake。在示例中,使用Snowflake帐户的用户名和密码建立连接。但是,就我而言,我正在通过Okta进行身份验证。我可以看到有一个Okta身份验证选项可以使用Python connector进行连接。但是,我找不到相同的Spark数据框。

对于生产管道部署,是否建议使用Okta身份验证?

有没有人有类似的用例或知道设置?非常感谢您的帮助。

谢谢, 苏里亚

1 个答案:

答案 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()