当我试图在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()
方法?
发布于 2019-03-14 21:34:48
有必要覆盖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测试库的外部jars。
莱昂纳多·诺莱托致谢:https://github.com/holdenk/spark-testing-base/issues/281#event-2200108290
发布于 2019-02-22 04:19:22
不太确定如何在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来做到这一点。
https://stackoverflow.com/questions/54578781
复制相似问题