本文涵蓋 Databricks 筆記本的已知限制。 如需其他資源限制,請參閱 資源限制。
筆記本的尺寸
- 所有 100 MB 以下的筆記本都支援修訂快照自動儲存、手動儲存和複製。
- IPYNB 筆記本支援最大 100 MB 的匯入和匯出。
- 支援 DBC 封存、HTML、R Markdown,及最大 10 MB 的原始筆記本的匯入和匯出。
- 個別筆記本儲存格的輸入限制為 6 MB。
筆記本儲存格輸出
- 表格結果限制為 10,000 列或 2 MB,以較低者為準。
- 作業叢集的筆記本輸出大小上限為 30 MB。
- 在 Databricks Runtime 17.0 和更新版本中,以及無伺服器環境 3:
- 單元格輸出大小上限預設為10 MB。
- 您可以在 Python 單元格中使用以下 cell magic,將此限制自定義為包括 1 MB 到 20 MB 在內的任何值:
%set_cell_max_output_size_in_mb <size_in_MB>。 此限制接著會套用至筆記本中的所有儲存格。 - 當儲存格輸出超過設定的大小限制時,輸出會截斷以符合限制。 截斷的方式是為了盡可能保留有用的輸出結果。
- 在 Databricks Runtime 16.4 LTS 及以前的版本,以及無伺服器環境 2 及以前的版本中:
- 文字結果最多會傳回 50,000 個字元。
- 在 Databricks Runtime 12.2 和更新版本中,您可以藉由設定 Spark 組態屬性
spark.databricks.driver.maxReplOutputLength,將此限制增加至 20 MB。 - 當儲存格輸出超過設定的大小限制時,輸出將會被完全捨棄。
筆記本調試程式
筆記本調試程式的限制:
- 調試程式只適用於 Python。 它不支援 Scala 或 R。
- 若要存取除錯程式,您的筆記本必須連線到下列其中一個計算資源:
- 除錯器不支援進入 Python 程式庫進行單步執行。
- 當偵錯會話處於作用中狀態時,您無法在筆記本中執行其他命令。
- 當連線到 無伺服器計算 和叢集且 存取模式 設定為 Standard 的叢集時,調試程式不支援在子進程上進行偵錯。
SQL 倉儲筆記本
- 當連結至 SQL 倉儲時,執行內容具有 8 小時的閒置逾時。
ipywidgets (互動插件)
ipywidgets 的限制:
- 使用ipywidgets的筆記本必須附加至執行中的叢集。
- 小工具狀態不會跨筆記本會話保留。 每次將筆記本附加至叢集時,您必須重新執行小工具數據格來轉譯它們。
- 不支持密碼和控制器 ipywidget。
- 具有 LaTeX 表達式的 HTMLMath 和 Label 小工具無法正確轉譯。 (例如,
widgets.Label(value=r'$$\frac{x+1}{x-1}$$')無法正確轉譯。 - 如果筆記本處於深色模式,特別是彩色小工具,小工具可能無法正確轉譯。
- 小工具輸出無法在筆記本儀錶板檢視中使用。
- ipywidget 的訊息承載大小上限為 5 MB。 使用影像或大型文字數據的小工具可能無法正確轉譯。
Databricks 小工具
Databricks 小工具的限制:
最多可以在筆記本中建立 512 個小工具。
小工具名稱限制為1024個字元。
小工具標籤限製為 2048 個字元。
最多 2048 個字元可以輸入文字小工具。
多重選取、組合方塊或下拉式小工具最多可以有1024個選項。
已知有一個問題:即使清除或移除程序代碼中的小工具,在按下 [全部執行]之後,小工具狀態可能無法正確清除。 如果發生這種情況,您會看到小工具的畫面與打印狀態之間的差異。 個別重新執行儲存格可能會略過此問題。 若要完全避免此問題,Databricks 建議使用 ipywidgets。
您不應該直接在異步內容中存取小工具狀態,例如線程、子進程或結構化串流(foreachBatch),因為小工具狀態在執行異步程式代碼時可能會變更。 如果您需要存取異步內容中的小工具狀態,請以自變數的形式傳入。 例如,如果您有下列使用線程的程序代碼:
import threading def thread_func(): # Unsafe access in a thread value = dbutils.widgets.get('my_widget') print(value) thread = threading.Thread(target=thread_func) thread.start() thread.join()Databricks 建議改用自變數:
# Access widget values outside the asynchronous context and pass them to the function value = dbutils.widgets.get('my_widget') def thread_func(val): # Use the passed value safely inside the thread print(val) thread = threading.Thread(target=thread_func, args=(value,)) thread.start() thread.join()小工具通常無法在筆記本中不同程式語言間傳遞參數。 如果您一次執行一個數據格,您可以在 Python 數據格中建立小工具
arg1,並在 SQL 或 Scala 數據格中使用它。 不過,如果您使用 [全部 執行] 或執行筆記本做為作業,則無法運作。 某些因應措施包括:- 對於不混合語言的筆記本,您可以為每個語言建立筆記本,並在執行 筆記本時傳遞自變數。
- 您可以使用呼叫來存取小工具
spark.sql()。 例如,在 Python 中:spark.sql("select getArgument('arg1')").take(1)[0][0]。