У меня есть задание Spark, для которого запланировано время.
Когда я записываю DataFrame результата в Цель данных (S3, HDFS, DB ...), яхотите, чтобы то, что пишет Spark, не дублировалось для определенного столбца.
ПРИМЕР:
Допустим, MY_ID
- уникальный столбец.
1-е выполнение:
--------------
|MY_ID|MY_VAL|
--------------
| 1 | 5 |
| 2 | 9 |
| 3 | 6 |
--------------
2-е выполнение:
--------------
|MY_ID|MY_VAL|
--------------
| 2 | 9 |
| 3 | 2 |
| 4 | 4 |
--------------
То, что я ожидаю найти в Data Target после двух выполнений, выглядит примерно так:
--------------
|MY_ID|MY_VAL|
--------------
| 1 | 5 |
| 2 | 9 |
| 3 | 6 |
| 4 | 4 |
--------------
Где ожидаемый результат - результат первого выполнения с добавлением результатов второго выполнения.Если значение для MY_ID
уже существует, старое сохраняется, отбрасывая результаты новых выполнений (в этом случае 2-е выполнение хочет записать для MY_ID
3 MY_VAL
9. Так как эта запись уже существуетс 1-го выполнения новая запись отбрасывается).
Так что функции distinct()
недостаточно, чтобы гарантировать это условие.Уникальность столбца MY_ID
должна сохраняться даже в выгруженном выводе.
Есть ли какое-либо решение, которое может гарантировать это свойство при разумных вычислительных затратах?(Это в основном та же идея UNIQUE
в реляционных базах данных.)