在 Databricks 筆記本中開發程式代碼

此頁面描述如何在 Databricks 筆記本中開發程式代碼,包括自動完成、Python 和 SQL 的自動格式化、在筆記本中結合 Python 和 SQL,以及追蹤筆記本版本歷程記錄。

如需編輯器可用之進階功能的詳細資訊,例如自動完成、變數選取、多數據指標支援和並存差異,請參閱 使用 Databricks 筆記本和檔案編輯器

當您使用筆記本或檔案編輯器時,可以使用 Databricks Assistant 來協助您產生、說明和偵錯程式代碼。 如需詳細資訊,請參閱 使用 Databricks Assistant

從 Databricks Assistant 取得程式代碼撰寫說明

Databricks Assistant 是一個內容感知 AI 助理,您可以使用對話式介面與互動,讓您在 Databricks 內更具生產力。 您可以使用英文描述您的工作,並讓小幫手產生 Python 程式代碼或 SQL 查詢、說明複雜的程式碼,以及自動修正錯誤。 助理會使用 Unity 目錄元數據來了解整個公司的數據表、數據行、描述和熱門數據資產,以提供個人化的回應。

Databricks Assistant 可協助您完成下列工作:

  • 產生程序代碼。
  • 偵錯程式代碼,包括識別及建議錯誤修正。
  • 轉換和優化程序代碼。
  • 說明程序代碼。
  • 協助您在 Azure Databricks 檔中尋找相關信息。

如需使用 Databricks Assistant 協助您更有效率地撰寫程式代碼的相關信息,請參閱 使用 Databricks Assistant。 如需 Databricks Assistant 的一般資訊,請參閱 DatabricksIQ 支援的功能

存取筆記本以進行編輯

若要開啟筆記本,請使用工作區搜尋函式或使用工作區瀏覽器瀏覽至筆記本,然後按鍵的名稱或圖示。

瀏覽數據

使用架構瀏覽器來探索筆記本可用的數據表和磁碟區。 按兩下 筆記本數據圖示 筆記本左側以開啟架構瀏覽器。

[ 為您使用] 按鈕只會顯示您在目前會話或先前標示為 [我的最愛] 的數據表。

當您在 [篩選] 方塊中輸入文字時,顯示會變更為只顯示包含您輸入文字的專案。 目前開啟或已在目前會話中開啟的專案才會出現。 [ 篩選] 方塊不會完整搜尋筆記本可用的目錄、架構和數據表。

若要開啟 Kebab 功能表 kebab 功能表,請將游標停留在項目名稱上方,如下所示:

架構瀏覽器中的kebab功能表

如果項目是資料表,您可以執行下列動作:

  • 自動建立並執行數據格,以顯示資料表中的數據預覽。 從數據表的 Kebab 選單選取新儲存格中的 [預覽]。
  • 在目錄總管中檢視目錄、架構或數據表。 從 Kebab 功能表選取 [ 在目錄總 管中開啟]。 隨即開啟新的索引標籤,其中顯示選取的專案。
  • 取得目錄、架構或數據表的路徑。 選取 [ 複製...專案的 Kebab 功能表路徑
  • 將數據表新增至我的最愛。 從數據表的 Kebab 選單選取 [將數據表新增至我的最愛]。

如果專案是目錄、架構或磁碟區,您可以複製項目的路徑,或在目錄總管中開啟它。

若要將資料表或資料列名稱直接插入儲存格中:

  1. 在您要輸入名稱的位置,按下儲存格中的數據指標。
  2. 將游標移至架構瀏覽器中的數據表名稱或資料行名稱。
  3. 按兩下項目名稱右邊出現的雙箭號 雙箭號

鍵盤快速鍵

若要顯示鍵盤快捷方式,請選取 [說明 > 鍵盤] 快捷方式。 可用的鍵盤快捷方式取決於游標是否位於程式代碼數據格(編輯模式)或否(命令模式)。

尋找及取代文字

若要尋找並取代筆記本內的文字,請選取 [ 編輯 > 尋找和取代]。 目前的相符專案會以橙色醒目提示,所有其他相符項目都會以黃色反白顯示。

比對文字

若要取代目前的相符專案,請按兩下 [取代]。 若要取代筆記本中的所有相符專案,請按兩下 [全部取代]。

若要在相符項目之間移動,請按兩下 [ 上一 頁] 和 [下一步] 按鈕。 您也可以按shift+enter鍵,然後分別進入上一個和下一個相符專案。

若要關閉尋找並取代工具,請按兩下 刪除圖示 或按 esc 鍵。

變數總管

您可以直接觀察筆記本 UI 中的 Python、Scala 和 R 變數。 針對 Databricks Runtime 12.1 和更新版本上的 Python,變數會在數據格執行時更新。 針對 Databricks Runtime 12.0 和以下的 Scala、R 和 Python,變數會在數據格完成執行之後更新。

若要開啟變數總管,請按下變數總管圖示右側提要欄位。 變數總管隨即開啟,其中顯示筆記本中目前定義之每個變數的值和數據類型,包括圖形。 (PySpark 數據框架的形狀是 '?',因為計算圖形的成本可能很高。

若要篩選顯示,請在搜尋方塊中輸入文字。 當您輸入時,會自動篩選清單。

當您執行筆記本數據格時,變數值會自動更新。

範例變數總管面板

執行選取的儲存格

您可以執行單一儲存格或儲存格集合。 若要選取單一單元格,請單擊單元格中的任何位置。 若要選取多個單元格,請按住 Command MacOS 上的按鍵或 Ctrl Windows 上的按鍵,然後按下文字區域以外的單元格,如螢幕快照所示。

如何選取多個單元格

若要執行選取的儲存格,請選取 [執行>執行選取的儲存格]。

此命令的行為取決於筆記本所連結的叢集。

  • 在執行 Databricks Runtime 13.3 LTS 或以下的叢集上,會個別執行選取的單元格。 如果儲存格中發生錯誤,則執行會繼續進行後續儲存格。
  • 在執行 Databricks Runtime 14.0 或更新版本或 SQL 倉儲的叢集上,選取的數據格會以批次方式執行。 任何錯誤都停止執行,而且您無法取消個別儲存格的執行。 您可以使用 [中斷] 按鈕停止執行所有儲存格。

將程式代碼模組化

重要

這項功能處於公開預覽狀態

使用 Databricks Runtime 11.2 和更新版本,您可以在 Azure Databricks 工作區中建立和管理原始程式碼檔案,然後視需要將這些檔案匯入筆記本。

如需使用原始碼檔案的詳細資訊,請參閱 在 Databricks Notebook和使用 Python 和 R 模組之間共用程式代碼。

執行選取的文字

您可以在筆記本數據格中反白顯示程式代碼或 SQL 語句,並只執行該選取範圍。 當您想要快速反覆運算程式代碼和查詢時,這會很有用。

  1. 反白顯示您想要執行的行。

  2. 選取 [執行執行選取的文字],或使用鍵盤快捷方式 CtrlShiftEnter++> 如果未反白顯示任何文字, 執行選取的文字 會執行目前的行。

    執行選取的行

如果您在儲存格中使用混合語言,則必須%<language>在選取範圍中包含這一行。

如果反白顯示選取範圍中有任何專案,則執行選取的文字 也會執行折疊的程序代碼。

支援、、 和 %sh%run%pip特殊儲存格命令。

您無法在 具有多個輸出索引標籤的儲存格上使用 [執行選取的文字 ] (也就是您已定義數據設定檔或視覺效果的儲存格)。

格式化程序代碼儲存格

Azure Databricks 提供工具,可讓您快速且輕鬆地在筆記本數據格中格式化 Python 和 SQL 程式代碼。 這些工具可減少將程式代碼格式化的工作,並協助在您的筆記本中強制執行相同的編碼標準。

格式化 Python 單元格

重要

這項功能處於公開預覽狀態

Azure Databricks 支援在 筆記本中使用 Black 進行 Python 程式代碼格式設定。 筆記本必須附加至已安裝 和 tokenize-rt Python 套件的叢集black,而且 Black 格式器會在筆記本所連結的叢集上執行。

在 Databricks Runtime 11.2 和更新版本上,Azure Databricks 預安裝 blacktokenize-rt。 您可以直接使用格式器,而不需要安裝這些連結庫。

在 Databricks Runtime 11.1 和以下版本上,您必須在筆記本或叢集上安裝和tokenize-rt==4.2.1從 PyPI,black==22.3.0才能使用 Python 格式器。 您可以在筆記本中執行下列命令:

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

在您的叢集上安裝連結庫。

如需安裝連結庫的詳細資訊,請參閱 Python 環境管理

針對 Databricks Repos 中的檔案和筆記本,您可以根據 pyproject.toml 檔案設定 Python 格式器。 若要使用此功能,請在存放庫根目錄中建立檔案pyproject.toml,並根據 Black 組態格式進行設定。 編輯檔案中的 [tool.black] 區段。 當您格式化該存放庫中的任何檔案和筆記本時,就會套用設定。

如何格式化 Python 和 SQL 數據格

您必須擁有 筆記本的 CAN EDIT 許可權 ,才能格式化程式代碼。

您可以透過下列方式觸發格式器:

  • 格式化單一儲存格

    • 鍵盤快捷方式:按 Cmd+Shift+F
    • 命令操作選單:
      • 格式化 SQL 數據格:在 SQL 儲存格的命令操作下拉選單中選取 [格式化 SQL ]。 此功能表項只能在 SQL 筆記本數據格或具有 %sql語言魔術的儲存格中顯示。
      • 格式化 Python 單元格:在 Python 單元格的命令操作下拉功能表中選取 [格式化 Python ]。 此功能表項只能在 Python 筆記本數據格或具有 %python語言魔術的筆記本數據格中顯示。
    • 筆記本編輯功能表:選取 Python 或 SQL 單元格,然後選取 [編輯>格式儲存格]。
  • 格式化多個儲存格

    選取多個儲存格,然後選取 [編輯>格式儲存格]。 如果您選取多個語言的儲存格,則只會格式化 SQL 和 Python 數據格。 這包括使用 %sql%python的 。

  • 格式化筆記本中的所有 Python 和 SQL 數據格

    選取 [ 編輯 > 格式筆記本]。 如果您的筆記本包含一個以上的語言,則只會格式化 SQL 和 Python 數據格。 這包括使用 %sql%python的 。

程式代碼格式限制

  • Black 會 強制執行 4 個空間縮排的 PEP 8 標準。 無法設定縮排。
  • 不支援格式化 SQL UDF 內的內嵌 Python 字串。 同樣地,不支援在 Python UDF 內格式化 SQL 字串。

版本歷程記錄

Azure Databricks 筆記本會維護筆記本版本的歷程記錄,讓您檢視和還原筆記本先前的快照集。 您可以在版本上執行下列動作:新增批注、還原和刪除版本,以及清除版本歷程記錄。

您也可以 在 Databricks 中同步處理工作與遠端 Git 存放庫

若要存取筆記本版本,請按下 版本歷程記錄圖示 右側提要欄位。 筆記本版本歷程記錄隨即出現。 您也可以選取 [檔案 > 版本歷程記錄]。

新增註解

若要將批注新增至最新版本:

  1. 按兩下版本。

  2. 按兩下 [ 立即儲存]。

    儲存註解

  3. 在 [儲存筆記本版本] 對話框中,輸入批注。

  4. 按一下 [檔案] 。 筆記本版本會與輸入的批註一起儲存。

還原版本

若要還原版本:

  1. 按兩下版本。

  2. 按兩下 [ 還原此版本]。

    還原版本

  3. 按兩下 [ 確認]。 選取的版本會變成最新版的筆記本。

刪除版本

若要刪除版本項目:

  1. 按兩下版本。

  2. 點選垃圾桶圖示 資源回收筒

    刪除版本

  3. 按兩下 [ 是],清除。 選取的版本會從歷程記錄中刪除。

清除版本歷程記錄

在清除版本歷程記錄之後,就無法復原版本歷程記錄。

若要清除筆記本的版本歷程記錄:

  1. 選取 [ 檔案 > 清除版本歷程記錄]。
  2. 按兩下 [ 是,清除]。 筆記本版本歷程記錄已清除。

筆記本中的程式代碼語言

設定預設語言

筆記本的預設語言會出現在筆記本名稱旁邊。

筆記本默認語言

若要變更默認語言,請按下語言按鈕,然後從下拉功能表中選取新語言。 為了確保現有的命令能夠繼續運作,先前預設語言的命令會自動加上語言 magic 命令的前置詞。

混合語言

根據預設,儲存格會使用筆記本的預設語言。 您可以單擊語言按鈕,然後從下拉功能表中選取語言,以覆寫單元格中的默認語言。

單元格語言下拉式清單

或者,您可以在儲存格開頭使用語言 magic 命令 %<language> 。 支援的 magic 命令包括: %python%r%scala、 和 %sql

注意

當您叫用語言 magic 命令時,命令會分派至筆記本的執行內容中的 REPL。 以某個語言定義的變數(因此在該語言的 REPL 中也無法使用另一種語言的 REPL。 REPL 只能透過外部資源分享狀態,例如 DBFS 中的檔案或物件記憶體中的物件。

筆記本也支援一些輔助魔術命令:

  • %sh:可讓您在筆記本中執行殼層程序代碼。 如果殼層命令具有非零結束狀態,則若要使單元格失敗,請新增 -e 選項。 此命令只會在 Apache Spark 驅動程式上執行,而不是背景工作角色。 若要在所有節點上執行殼層命令,請使用 init 腳本
  • %fs:可讓您使用 dbutils 檔案系統命令。 例如,若要執行 dbutils.fs.ls 命令來列出檔案,您可以改為指定 %fs ls 。 如需詳細資訊,請參閱 使用 Azure Databricks 上的檔案。
  • %md:可讓您包括各種類型的文件,包括文字、影像,以及數學公式和方程式。 請參閱下一節。

Python 命令中的 SQL 語法醒目提示和自動完成

當您在 Python 命令中使用 SQL 時,可以使用語法醒目提示和 SQL 自動完成 ,例如在命令中 spark.sql

使用 Python 探索 Python 筆記本中的 SQL 數據格結果

您可能想要使用 SQL 載入資料,並使用 Python 來探索數據。 在 Databricks Python 筆記本中,SQL 語言數據格中的數據表結果會自動以指派給變數 _sqldf的 Python DataFrame 提供。

在 Databricks Runtime 13.0 和更新版本中,您也可以使用 IPython 的輸出快取系統來存取 DataFrame 結果。 提示計數器會出現在單元格結果底部顯示的輸出訊息中。 針對顯示的範例,您會將結果參考為 Out[2]

注意

  • _sqldf變數可能會在每次執行數據格時%sql重新指派。 若要避免遺失 DataFrame 結果的參考,請在執行下一個 %sql 數據格之前,將它指派給新的變數名稱:

    new_dataframe_name = _sqldf
    
  • 如果查詢使用 小工具 進行參數化,則結果無法做為 Python DataFrame 使用。

  • 如果查詢使用 關鍵詞 CACHE TABLEUNCACHE TABLE,則結果無法作為 Python 數據框架使用。

這個螢幕快照顯示範例:

sql results dataframe

平行執行 SQL 資料格

當命令正在執行,且筆記本已連結至互動式叢集時,您可以使用目前的命令同時執行 SQL 資料格。 SQL 儲存格會在新的平行工作階段中執行。

若要平行執行儲存格:

  1. 執行儲存格

  2. 按一下 [立即執行]。 數據格會立即執行。

    使用目前執行的數據格平行執行 SQL 儲存格

因為儲存格是在新的工作階段中執行,因此平行執行的儲存格不支援暫存檢視、UDF 和 隱含 Python DataFrame_sqldf)。 此外,在平行執行期間會使用預設目錄和資料庫名稱。 如果您的程式代碼參考不同目錄或資料庫中的數據表,您必須使用三層命名空間 (catalog..schema.table ) 來指定資料表名稱。

在 SQL 倉儲上執行 SQL 數據格

重要

這項功能處於公開預覽狀態

您可以在 SQL 倉儲的 Databricks 筆記本中執行 SQL 命令,這是針對 SQL 分析優化的計算類型。 請參閱 搭配 SQL 倉儲使用筆記本。

顯示影像

若要顯示儲存在 FileStore 中的影像,請使用語法:

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

例如,假設您在 FileStore 中有 Databricks 標誌圖像檔:

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

當您在 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

您可以使用 函 displayHTML式在筆記本中包含 HTML。 如需如何執行這項操作的範例,請參閱 筆記本 中的 HTML、D3 和 SVG。

注意

iframe displayHTML 會從網域 databricksusercontent.com 提供,而 iframe 沙盒包含 allow-same-origin 屬性。 databricksusercontent.com 必須可從瀏覽器存取。 如果公司網路目前遭到封鎖,則必須將其新增至允許清單。

您可以使用相對路徑連結至 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>