Databricks 笔记本的已知限制

本文介绍 Databricks 笔记本的已知限制。 有关其他资源限制,请参阅资源限制

笔记本大小调整

  • 单个笔记本单元的输入限制为 6 MB。
  • 修订快照自动保存、导入、导出和克隆的最大笔记本大小为 10 MB。
  • 可以手动保存最多 32 MB 的笔记本。

笔记本结果表

  • 表结果限制为 10K 行或 2MB,以较低者为准。
  • 作业群集的最大笔记本输出大小为 30 MB。
  • 非表格命令结果限制为 20MB。
  • 默认情况下,文本结果最多返回 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}$$') 无法正确呈现。)
  • 如果笔记本处于深色模式,小组件可能无法正确呈现,尤其是彩色小组件。
  • 小组件输出不能用于笔记本仪表板视图。
  • 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]