Записи не отображаются до перезапуска кластера Azure Databricks

#databricks #azure-databricks #delta-lake

Вопрос:

Мы используем Azure Databricks / Delta lake в течение последних нескольких месяцев и недавно начали замечать некоторые странные особенности поведения с загруженными записями, в частности, последние записи не возвращаются, если кластер не перезапущен или не указан конкретный номер версии.

Например (не возвращает записей)

 df_nw = spark.read.format('delta').load('/mnt/xxxx')
display(df_nw.filter("testcolumn = ???")) 

Но это делает

 %sql

SELECT * FROM delta.`/mnt/xxxx` VERSION AS OF 472 where testcolumn = ??? 

Как упоминалось выше, это, похоже, влияет только на недавно вставленные записи. Кто-нибудь еще сталкивался с этим раньше?

Любая помощь будет признательна.

Спасибо, Кол

Ответ №1:

Проверьте, установили ли вы предел устаревания. Если у вас есть, это ожидается, если нет, пожалуйста, создайте заявку в службу поддержки.

https://docs.databricks.com/delta/optimizations/file-mgmt.html#manage-data-recency

Комментарии:

1. Спасибо за это, я просмотрел предоставленный пост, выполнил следующее spark.conf.get("spark.databricks.delta.stalenessLimit") и подтвердил, что наш лимит устаревания установлен на «0 мс». Я подниму заявку в службу поддержки и сообщу о своих выводах.

Ответ №2:

На всякий случай, если у кого-то еще возникнет подобная проблема, я подумал, что стоило бы поделиться решением, на которое я случайно наткнулся. На прошлой неделе я столкнулся с проблемами в нашем кластере Databricks, из-за которых драйверы spark постоянно выходили из строя при ресурсоемких рабочих нагрузках. После долгих исследований выяснилось, что наш кластер работал в стандартном (однопользовательском) режиме. Итак, я создал новый кластер с высоким уровнем параллелизма. Проблема все еще время от времени возникала в кластере с высоким уровнем параллелизма, поэтому я решил переключить ноутбук на старый кластер, который все еще находился в активном состоянии, и там можно было запрашивать только что загруженные данные. Это заставило меня поверить, что Databricks / Spark Engine не обновлял базовый набор данных и не использовал ранее кэшированную версию данных, хотя я явно не кэшировал базовый набор данных.

При запуске %sql CLEAR CACHE данные появились так, как и ожидалось.