Запись Spark Dataframe в MySQL с помощью SaveMode.Append вместе с дублирующимися записями - PullRequest
0 голосов
/ 28 августа 2018

Попытка записи в существующую таблицу MySQL, возможно, с некоторыми дублированными записями.

df.write
    .mode(SaveMode.Append)
    .jdbc(jdbcUrl, db_table, connectionProperties)

То, что я хочу, это "вставить игнорировать". Но, похоже, SaveMode.Append не допустит дублирования. SaveMode.Ignore не будет работать, так как игнорирует всю таблицу. Есть предложения?

1 Ответ

0 голосов
/ 28 августа 2018

Известная проблема.

У меня есть требование UPSert к mySQL в некоторых незначительных случаях.

То, что я делал, было в таких случаях:

  1. Обработка в SPARK и сохранение результатов для временного просмотра или обработка результатов в Dataframe / DataSet.
  2. Сохранить с шага 1 во временную таблицу mySQL.
  3. Выполнение оператора mutate из SPARK, выполняющего UPSert в и в среде mySQL, от временной таблицы до финальной таблицы в состоянии покоя в mySQL.

Это лучшее, что я получил. Есть и другие подходы, но это один из таких подходов.

Я говорил в общих терминах, поэтому для mySQL, поскольку UPSert отсутствует, я использовал такой подход:

insert into t1(a, b, c)
select d, e, f from t2
on duplicate key update b = e, c = f;

с помощью оператора mutate. Не совсем ИСКРА, но мы должны время от времени обходиться!

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