为 spark-testing-base 设置 Spark Config 属性



当我尝试在Python中使用spark-testing-base时,我需要测试一个在Postgres DB上写入的函数。

为此,必须向 Spark 会话提供连接到 Posgtres的驱动程序;为此,我首先尝试覆盖 getConf() 方法(如注释Override this to specify any custom configuration.中所述(。但显然它不起作用。可能我没有使用所需的语法或其他任何东西传递值,但经过多次尝试,我还是java.lang.ClassNotFoundException: org.postgresql.Driver得到错误(典型的驱动程序 Jar 未通过 conf 参数正确下载时(。

尝试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()方法?

不确定如何在 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来做到这一点。

有必要重写 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测试库的外部jar。

致谢莱昂纳多·诺莱托:https://github.com/holdenk/spark-testing-base/issues/281#event-2200108290

最新更新