我有一個主人安排筆記本運行幾個不同的筆記本使用dbutils.notebook.run()函數。偶爾,這些孩子的筆記本會失敗(由於API連接等等)。我的問題是,當我試圖捕捉錯誤:
試題:dbutils.notebook.run (notebook_path timeout_seconds = 0)除了異常e:打印(e)
錯誤總是相同的筆記本/故障點:
調用o8701._run時發生一個錯誤。\ n: com.databricks。WorkflowException: com.databricks。NotebookExecutionException: \ n \乙com.databricks.workflow.WorkflowDriver.run失敗(WorkflowDriver.scala: 98) \ n \乙com.databricks.dbutils_v1.impl.NotebookUtilsImpl.run (NotebookUtilsImpl.scala: 134) \ n \乙com.databricks.dbutils_v1.impl.NotebookUtilsImpl._run (NotebookUtilsImpl.scala: 96) \ n \乙sun.reflect.NativeMethodAccessorImpl。在voke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)\n\tat py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:380)\n\tat py4j.Gateway.invoke(Gateway.java:295)\n\tat py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)\n\tat py4j.commands.CallCommand.execute(CallCommand.java:79)\n\tat py4j.GatewayConnection.run(GatewayConnection.java:251)\n\tat java.lang.Thread.run(Thread.java:748)\nCaused by: com.databricks.NotebookExecutionException: FAILED\n\tat com.databricks.workflow.WorkflowDriver.run0(WorkflowDriver.scala:146)\n\tat com.databricks.workflow.WorkflowDriver.run(WorkflowDriver.scala:93)\n\t... 13 more\n
這將是有用的捕獲實際的錯誤發生在筆記本上,而不是一個隻是表明它失敗了。
我明白我可以捕獲任何異常和傳播他們使用dbutils.notebook.exit()函數,但我寧願沒有try-except包裝每一個潛在的問題。
有沒有更好的方法來捕獲的錯誤發生在一個孩子的筆記本嗎?
謝謝你的建議,@werners,但不幸的是行不通的。
我們原來有工作都單獨安排,但越來越多的混亂讓事情因為你需要點擊通過UI找到工作,然後找到錯誤。
我們現在試圖建立一個框架,可以自動運行日誌到表中我們可以有所有信息在一個地方。這將是強大的幫助如果我們還可以捕捉錯誤所以我們可以識別錯誤的類型,而不需要篩選雖然UI。
你嚐試使用一個自定義日誌記錄器來捕獲這些錯誤消息嗎?
自定義日誌記錄器將工作,但我們希望給予解決方案,不需要我們編寫特定代碼在每個筆記本自調度器將跨團隊使用。