Databricks - как определяется количество разделов?

Я обрабатываю файл, для которого я запускаю repartition(48, key) перед сохранением в виде дельты. При первоначальном запуске он генерирует около 25 разделов в пределах дельты (нет проблем, поскольку возможно, что ключ привел к тому, что данные попали в 25 разделов - я предполагаю, что это не обязательно создает раздел для узла, на котором не было данных?).

Однако при втором запуске, которое выполняется с помощью MERGE, было сгенерировано более 60 файлов разделов (это процесс SCD с 1700 уже существующими ключами и только 300 новыми ключами).

Насколько я понимаю, repartition использует алгоритм хеширования, чтобы определить, в какой из разделов попадает ключ, поэтому, если это так, как он создал больше файлов разделов, чем определенные разделы?

Пример кода:

df = spark.read...
  
key = ["COL_A"]
partitions = 48
df.repartition(partitions, *[col(c) for c in key])


person RAB    schedule 23.09.2020    source источник
comment
предоставьте df.explain журнал и свой код для лучшего понимания   -  person kavetiraviteja    schedule 23.09.2020
comment
Я добавил основы того, что делает мой код, в отредактированном сообщении. Я вставил df.explain сразу после этого, но он просто выпалил столбцы, куда должен идти df.explain? Что я должен искать, чтобы объяснить, почему он разделен сверх 48 запрошенных?   -  person RAB    schedule 24.09.2020
comment
Можете ли вы поделиться полным кодом, который вы используете для MERGE, а также тем, какие дельта-параметры вы применили в свойствах сеанса Spark или таблицы?   -  person Silvio    schedule 28.09.2020


Ответы (1)


Операция перераспределения выполнялась в исходном фрейме данных, после того, как он преобразован в дельта-озеро, он не сохраняет эти настройки перераспределения. После создания дельта-озера операция слияния найдет разделы, соответствующие условию whenMatched, и просто заменит их новыми данными. Как вы видели, он пропустил много данных и повысил производительность. Точно так же вы можете добавлять / добавлять новые данные, которые также могут появиться в виде новых разделов. Вам нужно Optimize yor delta-lake для объединения небольших файлов, созданных при изменении новых данных.

person Salim    schedule 12.01.2021