当我尝试在Python中使用spark-testing-base时,我需要测试一个在Postgres DB上编写的函数。
为此,有必要向Spark会话提供驱动程序以连接到Posgtres;为了实现这一点,我首先尝试覆盖getConf()
method(如评论Override this to specify any custom configuration.
中所述)。但是显然这是行不通的。可能我没有使用所需的语法或任何其他方式传递值,但是经过多次尝试,我仍然收到错误java.lang.ClassNotFoundException: org.postgresql.Driver
(通常是通过conf参数未正确下载Driver Jar的情况)。
尝试getConf
覆盖:
def getConf(self):
return ("spark.jars.packages", "org.postgresql:postgresql:42.1.1")
def getConf(self):
return {"spark.jars.packages", "org.postgresql:postgresql:42.1.1"}
def getConf(self):
return SparkConf()\
.setMaster("local[*]")\
.setAppName("test")\
.set("spark.jars.packages", "org.postgresql:postgresql:42.1.1")
所以我什至试图覆盖the setUp()
这样的方法:
def setUp(self):
try:
from pyspark.sql import Session
self.session = Session.Builder.config("spark.jars.packages", "org.postgresql:postgresql:42.1.1")
self.sqlCtx = self.session._wrapped
except Exception:
self.sqlCtx = SQLContext(self.sc)
但是仍然没有运气。所以我做错了什么?我应该如何覆盖getConf()
方法?
答案 0 :(得分:0)
不确定如何在python中执行此操作。在Scala中,使用sbt相当简单。但是无论如何,这里找到的System.setProperty("spark.jars.packages", "org.postgresql:postgresql:42.1.1")
方法:https://github.com/holdenk/spark-testing-base/issues/187对我有用。
因此,我想知道如何使用python + spark。
答案 1 :(得分:0)
有必要重写setUpClass方法:
@classmethod
def setUpClass(cls):
"""Setup a basic Spark context for testing"""
class_name = cls.__name__
conf = SparkConf().set("spark.jars.packages", "org.postgresql:postgresql:42.1.1")
cls.sc = SparkContext(cls.getMaster(), appName=class_name, conf=conf)
quiet_py4j()
然后可以通过这种方式将Spark传递给外部库中的Spark测试库。
Leonardo Noleto的积分:https://github.com/holdenk/spark-testing-base/issues/281#event-2200108290