Поделиться через


Разработка кода в записных книжках Databricks

На этой странице описывается разработка кода в записных книжках Databricks, включая автозавершение, автоматическое форматирование для Python и SQL, объединение Python и SQL в записную книжку и отслеживание журнала версий записной книжки.

Дополнительные сведения о расширенных функциональных возможностях, доступных в редакторе, таких как автозаполнение, выбор переменных, поддержка нескольких курсоров и параллельные диффы, см. в разделе Навигация по записной книжке Databricks и редактору файлов.

При использовании записной книжки или редактора файлов помощник Databricks доступен, чтобы помочь вам с generate, explainи отладкой кода. Дополнительные сведения см. в разделе "Использование Помощника по Databricks".

Записные книжки Databricks также включают встроенный интерактивный отладчик для записных книжек Python. См . статью "Отладка записных книжек".

Модульная настройка кода

Внимание

Эта функция предоставляется в режиме общедоступной предварительной версии.

С помощью Databricks Runtime 11.3 LTS и более поздних версий вы можете создавать и управлять файлами исходного кода в рабочей области Azure Databricks, а затем импортировать эти файлы в записные книжки по мере необходимости.

Дополнительные сведения о работе с файлами исходного кода см. в статье "Общий доступ к коду между записными книжками Databricks" и "Работа с модулями Python и R".

Форматирование ячеек кода

Azure Databricks предоставляет средства, позволяющие быстро и легко форматировать код Python и SQL в ячейках записной книжки. Эти средства упрощают форматирование кода и применение единых стандартов кодирования в записных книжках.

Библиотека черного форматирования Python

Внимание

Эта функция предоставляется в режиме общедоступной предварительной версии.

Azure Databricks поддерживает форматирование кода Python с помощью черного цвета в записной книжке. Записная книжка должна быть подключена к кластеру с установленными пакетами blacktokenize-rt Python.

В Databricks Runtime 11.3 LTS и более поздних версиях предустановки black Azure Databricks и tokenize-rt. Вы можете использовать средство форматирования напрямую без необходимости устанавливать эти библиотеки.

В Databricks Runtime 10.4 LTS и ниже необходимо установить black==22.3.0 и tokenize-rt==4.2.1 из PyPI в записной книжке или кластере, чтобы использовать средство форматирования Python. В записной книжке можно выполнить следующую команду:

%pip install black==22.3.0 tokenize-rt==4.2.1

или установите библиотеку в кластере.

Дополнительные сведения об установке библиотек см. в разделе "Управление средой Python".

Для файлов и записных книжек в папках Databricks Git можно настроить средство форматирования Python на pyproject.toml основе файла. Чтобы использовать эту функцию, создайте pyproject.toml файл в корневом каталоге папки Git и настройте его в соответствии с форматом конфигурации Black. Измените раздел [tool.black] в файле. Конфигурация применяется при форматировании любого файла и записной книжки в этой папке Git.

Форматирование ячеек Python и SQL

Для форматирования кода необходимо иметь разрешение CAN EDIT в записной книжке.

Azure Databricks использует библиотеку gethue/sql-formatter для форматирования SQL и черного формата кода для Python.

Форматировщик можно активировать следующими способами:

  • Форматирование одной ячейки

    • Сочетание клавиш: CMD + SHIFT + F.
    • Контекстное меню команд:
      • Форматирование ячейки SQL: SelectФормат SQL в раскрывающемся меню контекста команды ячейки SQL. Этот пункт меню отображается только в ячейках записной книжки SQL или с %sqlмагией языка.
      • Форматирование ячейки Python: Selectв раскрывающемся меню контекста команды ячейки Python выберите "Форматирование Python". Этот пункт меню отображается только в ячейках записной книжки Python или с магией %pythonязыка.
    • Меню "Изменить записной книжки" : ячейку Python или SQL, а затем "Изменить ячейки форматирования".
  • Форматирование нескольких ячеек

    Select несколько ячеек, а затем selectоткройте > Формат ячеек. Если select ячейки нескольких языков, отформатируются только ячейки SQL и Python. Это включает те, которые используют %sql и %python.

  • Форматирование всех ячеек Python и SQL в записной книжке

    Select Редактировать > Формат записной книжки. Если записная книжка содержит несколько языков, отформатируются только ячейки SQL и Python. Это включает те, которые используют %sql и %python.

Ограничения форматирования кода

  • Черный применяет стандарты PEP 8 для отступа 4 пробела. Отступ не настраивается.
  • Форматирование внедренных строк Python в UDF SQL не поддерживается. Аналогичным образом форматирование строк SQL в UDF Python не поддерживается.

Языки кода в записных книжках

язык по умолчанию Set

Язык по умолчанию для записной книжки отображается рядом с именем записной книжки.

Язык записной книжки по умолчанию

Чтобы изменить язык по умолчанию, нажмите кнопку языка и select новый язык в раскрывающемся меню. Чтобы обеспечить продолжение работы существующих команд, к командам предыдущего языка по умолчанию автоматически добавляется префикс магической команды языка.

Использование нескольких языков

По умолчанию в ячейках используется язык записной книжки по умолчанию. Вы можете переопределить язык по умолчанию в ячейке, нажав кнопку языка и выбрав язык в раскрывающемся меню.

Раскрывающийся список языков ячейки

Вы также можете использовать магическую команду языка %<language> в начале ячейки. Поддерживаемые магические команды: %python, %r, %scala и %sql.

Примечание.

При вызове магической команды языка команда отправляется в REPL в контексте выполнения записной книжки. Переменные, определенные на одном языке (и, следовательно, в REPL для этого языка), недоступны в REPL на другом языке. REPL могут предоставлять общий доступ к состоянию только через внешние ресурсы, такие как файлы в DBFS или объекты в хранилище объектов.

Ноутбуки также поддерживают несколько вспомогательных магических команд:

  • %sh позволяет запускать код оболочки в записной книжке. Для сбоя ячейки, если команда оболочки имеет состояние выхода, отличное от нуля, добавьте параметр -e. Эта команда выполняется только для драйвера Apache Spark, а не для рабочих ролей. Чтобы выполнить команду оболочки на всех узлах, используйте скрипт init.
  • %fs позволяет использовать команды файловой системы dbutils. Например, чтобы выполнить команду dbutils.fs.ls для list файлов, можно указать %fs ls вместо этого. Дополнительные сведения см. в статье "Работа с файлами в Azure Databricks".
  • %md: Позволяет включать различные типы документации, включая текст, изображения, математические формулы и уравнения. См. следующий раздел.

Выделение синтаксиса SQL и автозавершение в командах Python

Функции выделения синтаксиса и автозаполнения SQL доступны при использовании SQL внутри команды Python, например в команде spark.sql.

Изучение результатов ячейки SQL

В записной книжке Databricks результаты из языковой ячейки SQL автоматически становятся доступными как неявный кадр данных, назначенный переменной _sqldf. Затем эту переменную можно использовать в любых ячейках Python и SQL, которые вы запускаете после этого, независимо от их положения в записной книжке.

Примечание.

Сейчас эта функция имеет следующие ограничения:

  • Переменная _sqldf недоступна в записных книжках, использующих хранилище SQL для вычислений.
  • Использование _sqldf в последующих ячейках Python поддерживается в Databricks Runtime 13.3 и выше.
  • Использование _sqldf в последующих ячейках SQL поддерживается только в Databricks Runtime 14.3 и выше.
  • Если в запросе используются ключевые слова CACHE TABLE или UNCACHE TABLE_sqldfпеременная недоступна.

На снимке экрана ниже показано, как _sqldf можно использовать в последующих ячейках Python и SQL:

Кадр данных результатов SQL

Внимание

Переменная _sqldf переназначается при каждом запуске ячейки SQL. Чтобы избежать потери ссылки на определенный результат DataFrame, назначьте его новому имени переменной перед запуском следующей ячейки SQL:

Python

new_dataframe_name = _sqldf

SQL

ALTER VIEW _sqldf RENAME TO new_dataframe_name

Параллельное выполнение ячеек SQL

Хотя команда выполняется и записная книжка подключена к интерактивному кластеру, вы можете одновременно запустить ячейку SQL с текущей командой. Ячейка SQL выполняется в новом параллельном сеансе.

Для параллельного выполнения ячейки:

  1. Запустите ячейку.

  2. Щелкните Запустить сейчас. Ячейка немедленно выполняется.

    Параллельное выполнение ячейки SQL с текущей запущенной ячейкой

Так как ячейка выполняется в новом сеансе, временные views, пользовательские функции и неявные кадры данных Python (_sqldf) не поддерживаются для ячеек, выполняемых параллельно. Кроме того, во время параллельного выполнения используются имена catalog и баз данных по умолчанию. Если код ссылается на table в другой catalog или базе данных, необходимо указать имя table с помощью трехуровневого пространства имен (catalog.schema.table).

Выполнение ячеек SQL в хранилище SQL

Команды SQL можно запускать в записной книжке Databricks в хранилище SQL, тип вычислений, оптимизированных для аналитики SQL. См . статью "Использование записной книжки с хранилищем SQL".

Отображение изображений

Azure Databricks поддерживает отображение изображений в ячейках Markdown. Вы можете отображать изображения, хранящиеся в рабочей области, Volumesили FileStore.

Отображение изображений, хранящихся в рабочей области

Для отображения изображений, хранящихся в рабочей области, можно использовать абсолютные пути или относительные пути. Чтобы отобразить изображение, хранящееся в рабочей области, используйте следующий синтаксис:

%md
![my_test_image](/Workspace/absolute/path/to/image.png)

![my_test_image](./relative/path/to/image.png)

Внедрение изображения в ячейку Markdown

Отображение изображений, хранящихся в Volumes

Абсолютные пути можно использовать для отображения изображений, хранящихся в Volumes. Чтобы отобразить изображение, хранящееся в Volumes, используйте следующий синтаксис:

%md
![my_test_image](/Volumes/absolute/path/to/image.png)

Отображение изображений, хранящихся в FileStore

Чтобы отобразить изображения, хранящиеся в FileStore, используйте следующий синтаксис:

%md
![my_test_image](files/image.png)

Например, у вас есть файл изображения логотипа Databricks в FileStore:

dbfs ls dbfs:/FileStore/
databricks-logo-mobile.png

При включении следующего кода в ячейку Markdown:

Изображение в ячейке Markdown

изображение подготавливается к просмотру в ячейке:

Отрендеренное изображение

Перетаскивание изображений

Вы можете перетаскивать изображения из локальной файловой системы в ячейки Markdown. Изображение передается в текущий каталог рабочей области и отображается в ячейке.

Перетащите изображение в ячейку Markdown

Отображение математических уравнений

Записные книжки поддерживают KaTeX для отображения математических формул и уравнений. Например,

%md
\\(c = \\pm\\sqrt{a^2 + b^2} \\)

\\(A{_i}{_j}=B{_i}{_j}\\)

$$c = \\pm\\sqrt{a^2 + b^2}$$

\\[A{_i}{_j}=B{_i}{_j}\\]

отрисовывается следующим образом:

Отрендеренное уравнение 1

и

%md
\\( f(\beta)= -Y_t^T X_t \beta + \sum log( 1+{e}^{X_t\bullet\beta}) + \frac{1}{2}\delta^t S_t^{-1}\delta\\)

where \\(\delta=(\beta - \mu_{t-1})\\)

отрисовывается следующим образом:

Отрендеренное уравнение 2

Добавление HTML

Вы можете добавить HTML в записную книжку с помощью функции displayHTML. Пример того, как это сделать, см. в статье HTML, D3 и SVG в записных книжках.

Примечание.

Контейнер iFrame displayHTML обслуживается из домена databricksusercontent.com, а песочница iFrame включает атрибут allow-same-origin. Адрес databricksusercontent.com должен быть доступным из браузера. Если в данный момент оно заблокировано корпоративной сетью, оно должно быть добавлено в список разрешений list.

Вы можете добавить ссылки на другие записные книжки или папки в ячейках Markdown с помощью относительных путей. Укажите в качестве относительного пути атрибут тега привязки href, начиная с $, и следуйте тому же шаблону, что и в файловых системах UNIX:

%md
<a href="$./myNotebook">Link to notebook in same folder as current notebook</a>
<a href="$../myFolder">Link to folder in parent folder of current notebook</a>
<a href="$./myFolder2/myNotebook2">Link to nested notebook</a>