Загрузка данных с использованием sparkJDBCDataset с не работающими банками - PullRequest
1 голос
/ 18 марта 2020

При использовании sparkJDBCDataset для загрузки таблицы с использованием соединения JDB C я продолжаю сталкиваться с ошибкой, что искра не может найти мой драйвер. Драйвер определенно существует на компьютере, и его каталог указан в файле spark.yml в config/base.

. Я также следовал инструкциям и добавил def init_spark_session метод к src/project_name/run.py. Я подозреваю, однако, что определенная здесь свеча не воспринимается классом sparkJDBCDataset. Когда вы смотрите на исходный код для создания наборов свечей и загрузки внутри sparkJDBCDataset, это выглядит так, будто для загрузки и сохранения данных определена ванильная свеча без настроек. Конфиги, определенные внутри spark.yml, не используются для создания этой свечи. Ниже приведена выдержка из исходного кода

    @staticmethod
    def _get_spark():
        return SparkSession.builder.getOrCreate()

    def _load(self) -> DataFrame:
        return self._get_spark().read.jdbc(self._url, self._table, **self._load_args)

Когда я загружаю данные из источника jdb c вне Kedro, с помощью SparkSession, заданного с помощью spark.jars, данные загружаются как и ожидалось.

Есть ли способ указать spark.jars, а также другие другие sparkConf при создании sparksession, который считывает данные?

1 Ответ

0 голосов
/ 19 марта 2020

SparkSession.builder.getOrCreate на самом деле будет делать то, что говорит, и получит существующий сеанс спарка. Тем не менее, вы правы, что, если нет существующего сеанса, тогда будет создан ванильный сеанс.

Лучшее место для запуска init_spark_session - ваша функция run_package, в вашем контексте run.py, сразу после контекст загружен. Этот run.py вызывается, когда вызывается ваша команда kedro run.

Если вы хотите sh протестировать только свой каталог, то простой способ - убедиться в том, что в вашем тестовом коде или что если вы вызываете init_spark_session вручную перед выполнением кода соединения JDB C.

Это можно сделать с помощью следующего:

from kedro.context import load_context
kedro_project_path = “./“
context = load_context(kedro_project_path)
context.init_spark_session()

Где уместно kedro_project_path.

Извините за форматирование, кстати, я на мобильном.

...