如何处理 Spark SQL 上的 AnalysisException?

How to handle an AnalysisException on Spark SQL?

我正在尝试在 Spark 中执行查询列表,但如果查询不正确 运行,Spark 会抛出以下错误: AnalysisException: "ALTER TABLE CHANGE COLUMN 不支持更改 ...

这是我的代码的一部分(我在 Databricks 上使用 python 和 Spark SQL):

for index, row in df_tables.iterrows():
  query = row["query"]
  print ("Executing query: ")
  try:
      spark.sql(query)
      print ("Query executed")
  except (ValueError, RuntimeError, TypeError, NameError):
      print("Unable to process your query dude!!")
  else:
      #do another thing

有什么办法可以捕捉到这个异常吗? ValueError、RuntimeError、TypeError、NameError 似乎不起作用。 在 Spark 网页上没有那么多相关信息。

您可以修改 try except 语句如下:

try:
  spark.sql(query)
  print ("Query executed")
except Exception as x:
  print("Unable to process your query dude!!" + \
        "\n" + "ERROR : " + str(x)) 

我想这取决于你的要求。如果您 运行 此查询的完整工作流程并且您希望它们通过,那么您的代码将正常工作。但是假设您希望您的工作流或数据管道失败,那么您应该退出那个 except 块。

您可能无法获得确切的例外情况,但您绝对可以使用

获得概览
except Exception as x:
  print(str(x)) 

您可以使用日志记录模块将更多信息放入日志中以供进一步调查。

我发现 pyspark.sql.utils 中定义了 AnalysisException。 https://spark.apache.org/docs/3.0.1/api/python/_modules/pyspark/sql/utils.html

import pyspark.sql.utils
try:
    spark.sql(query)
    print ("Query executed")
except pyspark.sql.utils.AnalysisException:
    print("Unable to process your query dude!!")