Databricks 筆記本的已知限制
本文涵蓋 Databricks 筆記本的已知限制。 如需其他資源限制,請參閱 資源限制。
筆記本重設大小
- 個別筆記本儲存格的輸入限制為 6 MB。
- 修訂快照集自動儲存、匯入、導出和複製的筆記本大小上限為 10 MB。
- 您可以手動儲存最多 32 MB 的筆記本。
筆記本結果數據表
- 數據表結果限製為 10K 個資料列或 2MB,無論哪一個數據列較低。
- 作業叢集的筆記本輸出大小上限為 30 MB。
- 非表格式命令的結果有 20 MB 的限制。
- 根據預設,文字結果最多會傳回 50,000 個字元。 透過 Databricks Runtime 12.2 LTS 和更新版本,您可以藉由設定 Spark 組態屬性
spark.databricks.driver.maxReplOutputLength
來增加此限制。
筆記本調試程式
筆記本調試程式的限制:
- 調試程式只適用於 Python。 它不支援 Scala 或 R。
- 調試程式無法在共用存取模式叢集上運作。
- 調試程式不支援逐步執行外部檔案或模組。
- 當偵錯會話處於作用中狀態時,您無法在筆記本中執行其他命令。
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]
。