如何正确设置 PySpark - Snowflake 连接的变量?
Posted
技术标签:
【中文标题】如何正确设置 PySpark - Snowflake 连接的变量?【英文标题】:How to properly set variables for PySpark - Snowflake connection? 【发布时间】:2020-11-09 03:40:12 【问题描述】:我正在使用该文档并尝试运行此处找到的简单脚本:https://docs.snowflake.com/en/user-guide/spark-connector-use.html
Py4JJavaError: An error occurred while calling o37.load.
: java.lang.ClassNotFoundException: Failed to find data source: net.snowflake.spark.snowflake.
我的代码如下。我还尝试使用位于/Users/Hana/spark-sf/
目录中的 jdbc 和 spark-snowflake jar 的路径设置配置选项,但没有运气。
from pyspark import SparkConf, SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.types import *
from pyspark import SparkConf, SparkContext
spark = SparkSession \
.builder \
.appName("Python Spark SQL basic example") \
.config('spark.jars','/Users/Hana/spark-sf/snowflake-jdbc-3.12.9.jar,/Users/Hana/spark-sf/spark-snowflake_2.12-2.8.1-spark_3.0.jar') \
.getOrCreate()
# Set options below
sfOptions =
"sfURL" : "<account_name>.snowflakecomputing.com",
"sfUser" : "<user_name>",
"sfPassword" : "<password>",
"sfDatabase" : "<database>",
"sfSchema" : "<schema>",
"sfWarehouse" : "<warehouse>"
SNOWFLAKE_SOURCE_NAME = "net.snowflake.spark.snowflake"
df = spark.read.format(SNOWFLAKE_SOURCE_NAME) \
.options(**sfOptions) \
.option("query", "select * from table limit 200") \
.load()
df.show()
我应该如何正确设置变量?以及需要设置哪些?如果有人可以帮助列出这些步骤,我将不胜感激!
【问题讨论】:
【参考方案1】:你能不能只尝试“雪花”格式
所以你的数据框会有
df = spark.read.format("snowflake") \
.options(**sfOptions) \
.option("query", "select * from table limit 200") \
.load()
或将SNOWFLAKE_SOURCE_NAME
变量设置为
SNOWFLAKE_SOURCE_NAME = "snowflake"
【讨论】:
感谢您的输入 - 我试过了,我现在收到此错误:java.lang.ClassNotFoundException: Failed to find data source: snowflake. 你能点击这个链接吗:***.com/questions/62957222/…【参考方案2】:在配置本地开发环境时,我也一直在为“找不到数据源”而苦苦挣扎。
安装并设置我的环境变量后:
HADOOP_HOME
SCALA_HOME
SPARK_CLASSPATH
SPARK_HOME
并更新了Path
变量,我已经安装了雪花连接器:
pip install -r https://raw.githubusercontent.com/snowflakedb/snowflake-connector-python/v2.7.2/tested_requirements/requirements_39.reqs
pip install snowflake-connector-python==2.7.2
pyspark --packages net.snowflake:snowflake-jdbc:3.13.10,net.snowflake:spark-snowflake_2.12:2.9.2-spark_3.1
我试图在我的 python 代码中使用雪花数据源::
conf = SparkConf().setAppName('MYAPP').setMaster("local[*]")
sc = SparkContext(conf=conf)
spark_sql = SQLContext(sc)
df = spark_sql.read.format("snowflake")\
.options(**sfOptions)\
.option("query", query)\
.load()`enter code here`
但是pyspark似乎仍然不知道支持snowflake
数据源扩展所需的jar。
为了解决问题,我终于把需要的包添加到SparkConf
:
conf = SparkConf() \
.setAppName('MYAPP') \
.setMaster("local[*]") \
.set("spark.jars.packages", "net.snowflake:snowflake-jdbc:3.13.10,net.snowflake:spark-snowflake_2.12:2.9.2-spark_3.1")
请注意,我已将 spark.jars.packages
与软件包一起使用,而不是 spark.jars
与 jar 的完整路径
【讨论】:
以上是关于如何正确设置 PySpark - Snowflake 连接的变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 pyspark 为非 pairwiseRDD 正确 groupByKey
如何以正确的格式以科学记数法显示 PySpark 数据框中的列