Всем привет. Пытаюсь оптимизировать джойн двух больших таблиц, смотрю в сторону бакетинга. Начал его использовать, в плане всё стало хорошо, Exchange исчез. Но есть вопрос - в чем принципиальная разница в спарке между repartition(key1,key2,key3).save() и bucketBy(key1,key2,key3).save() ? Я же по идее могу просто вызвать репартишенинг по ключам джойна перед сохранением? эффект же тот же будет?
? В оперативной памяти или на диске? Или и там и там? Если в стриме без вотермарка делать .
dropDuplicates()
можно получить OOM на экзекюторе? Или просто диск забьется? Какие вообще есть best practice по дедупликации стрима в спарке при условии что дубликат может прийти когда угодно?
Про бакетировании инфа запишется в table properties, и если читать дальше с помощью .table, то количество партиций, и их расположение будет фиксированным - удобно, если табличка редко меняется, но часто джойнится с другими. В ином случае нужно каждый раз при чтении делать .repartition, чтобы получить такой результат.