#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
данные появились так, как и ожидалось.