Установить свойство Spark Config для spark-testing-base - PullRequest
0 голосов
/ 07 февраля 2019

Когда я пытался использовать spark-testing-base в Python, мне нужно было протестировать функцию, которая пишет в БД Postgres.

Для этого необходимо предоставитьSpark Session - драйвер для подключения к 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()?

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Необходимо было переопределить метод 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 внешние банки.

Кредиты Леонардо Нолето: https://github.com/holdenk/spark-testing-base/issues/281#event-2200108290

0 голосов
/ 21 февраля 2019

Не совсем уверен, как это сделать в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...