【问题标题】:How to handle exceptions in azure databricks notebooks?如何处理 azure databricks 笔记本中的异常?
【发布时间】:2021-06-14 11:27:30
【问题描述】:

我是 Azure 和 Spark 的新手,请求您帮助编写以下场景的异常处理代码。

我已经在 3 个不同的笔记本中编写了 HQL 脚本(比如 hql1、hql2、hql3),并在一个主笔记本 (hql-master) 上将它们全部调用为,

val df_tab1 = runQueryForTable("hql1", spark)
val df_tab2 = runQueryForTable("hql2", spark)

现在我将 HQL 脚本的输出存储为数据帧,我必须在主笔记本上编写异常处理,如果主笔记本已成功执行所有数据帧(df1_tab、df2_tab),则应将成功状态插入突触表作业状态。

否则,如果在执行主笔记本/数据帧期间出现任何错误/异常,则应捕获该错误消息并将故障状态插入到突触表中。

我已经有了用于插入成功/失败消息的 INSERT 脚本。如果您提供一个示例代码sn-p,通过它可以实现异常处理部分,这将非常有帮助。谢谢!!

【问题讨论】:

    标签: apache-spark exception databricks azure-databricks


    【解决方案1】:

    基本上,它只是一个简单的try/except 代码,如下所示:

    results = {}
    were_errors = False
    for script_name in ['script1', 'script2', 'script3']:
      try:    
        retValue = dbutils.notebook.run(script_name)
        results[script_name] = retValue
      except Exception as e:
        results[script_name] = "Error: {e}"
        were_errors = True
    
    if were_errors:
      log failure # you can use data from results variable
    else:
      log success
    

    【讨论】:

    • 谢谢@Alex。当我在 scala 中编写代码时,您能否以 scala 格式分享答案?另外,我已经在异常处理之前运行了 hql 脚本,如 val df_tab1 = runQueryForTable("hql_script_1", spark) & val df_tab2 = runQueryForTable("hql_script_2", spark)。所以 retValue = dbutils.. 将再次执行它们没有必要,因为我已经将 hql1 和 hql2 的输出保存为数据框(df_tab1,df_tab2)。我只需要检查这些数据帧是否成功执行(或)没有,根据df_tab1,df_tab2的结果,我应该编写异常处理。
    • scala 代码相同,只需将语法更改为try { execute logic } catch { case e: Exception => ... }
    猜你喜欢
    • 2017-02-27
    • 2022-07-27
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    相关资源
    最近更新 更多