Как я могу использовать условие «где не существует» SQL в pyspark? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть таблица в Hive, и я пытаюсь вставить данные в эту таблицу.
Я беру данные из SQL, но я не хочу вставлять идентификатор, который уже существует в таблице Hive.Я пытаюсь использовать то же условие, что и где не существует.Я использую PySpark на Airflow.

Ответы [ 2 ]

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

Оператор exists не существует в Spark, но есть 2 операторы соединения , которые могут заменить его: left_anti и left_semi.

Если вы хотите, например,Чтобы вставить фрейм данных df в таблицу кустов target, вы можете сделать:

new_df = df.join(
    spark.table("target"),
    how='left_anti',
    on='id'
)

, а затем написать new_df в своей таблице.

left_anti позволяет вамоставляйте только те строки, которые не удовлетворяют условию соединения (эквивалент not exists).Эквивалент exists равен left_semi.

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

ИМХО Я не думаю, что существует такая собственность в Spark.Я думаю, что вы можете использовать 2 подхода:

  1. Обходной путь с условием UNIQUE (типично для реляционных БД): таким образом, когда вы пытаетесь вставить (в режиме append)В уже существующей записи вы получите исключение, которое вы можете правильно обработать.

  2. Прочитайте таблицу, в которую вы хотите записать, outer join ее с данными, которые вы хотите добавитьв вышеупомянутую таблицу, а затем запишите результат в overwrite mode (но я думаю, что первое решение может быть лучше по производительности).

Для получения дополнительной информации не стесняйтесь спрашивать

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