Databricks ノートブックの既知の制限事項
この記事では、Databricks ノートブックの既知の制限事項について説明します。 その他のリソースの制限事項については、「リソース制限」を参照してください。
ノートブックのサイズ設定
- 個々のノートブック セルの入力制限は 6 MB です。
- リビジョン スナップショットの自動保存、インポート、エクスポート、複製の最大ノートブック サイズは 10 MB です。
- 32 MB までのノートブックは手動で保存できます。
ノートブックの結果テーブル
- テーブルの結果は、10K 行または 2 MB のいずれか小さい方に制限されます。
- ジョブ クラスターのノートブック出力の最大サイズは 30 MB です。
- 表形式以外のコマンドの結果には 20 MB の制限があります。
- 既定では、テキストの結果は最大 50,000 文字を返します。 Databricks Runtime 12.2 LTS 以降では、Spark 構成プロパティ
spark.databricks.driver.maxReplOutputLength
を設定することで、この制限を増やすことができます。
ノートブック デバッガー
ノートブック デバッガーの制限事項:
- デバッガーは Python でのみ機能します。 Scala や R には対応していません。
- デバッガーは、共有アクセス モードのクラスターでは機能しません。
- デバッガーは、外部のファイルやモジュールへのステップ インには対応していません。
- デバッグ セッションがアクティブな場合、ノートブック内で他のコマンドを実行できません。
SQL ウェアハウス ノートブック
SQL ウェアハウス ノートブックの制限事項:
- SQL ウェアハウスにアタッチすると、実行コンテキストのアイドル タイムアウトは 8 時間になります。
ipywidgets
ipywidgets の制限事項:
- ipywidgets を使用するノートブックは、実行中のクラスターにアタッチする必要があります。
- ウィジェットの状態は、ノートブック セッション間では保持されません。 ウィジェット セルをレンダリングするには、ノートブックをクラスターにアタッチするたびに再実行する必要があります。
- パスワードとコントローラーの ipywidget はサポートされていません。
- LaTeX 式を含む HTMLMath と Label の各ウィジェットは正しくレンダリングされません。 (たとえば、
widgets.Label(value=r'$$\frac{x+1}{x-1}$$')
は正しくレンダリングされません。) - ノートブックがダーク モードの場合、ウィジェット、特に色付きウィジェットは正しくレンダリングされない場合があります。
- ウィジェットの出力は、ノートブック ダッシュボード ビューでは使用できません。
- ipywidgets の最大メッセージ ペイロード サイズは 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()
一般に、ウィジェットはノートブック内の異なる言語間で引数を渡すことはできません。 一度に 1 つのセルを実行する場合は、Python セルでウィジェット
arg1
を作成し、SQL または Scala セルで使用できます。 ただし、[すべて実行] を使用する場合、またはジョブとしてノートブックを実行する場合は機能しません。 回避策の一部を次に示します。- 言語が混在していないノートブックの場合は、言語ごとにノートブックを作成し、ノートブックの実行時に引数を渡すことができます。
- ウィジェットにアクセスするには、
spark.sql()
呼び出しを使用します。 たとえば、Python では次のようになります:spark.sql("select getArgument('arg1')").take(1)[0][0]
。