exception - 无法处理 Py4JJavaError
问题描述
尝试处理向 spark.sql() 输入无效 sql 代码时引发的 Py4JJavaError。我的功能如下:
import py4j
def sql_to_df_and_create_view(sql_string: str, view_name: str):
''' Takes in a SQL command in string format and creates a spark df from the command.
Secondly, creates a temporary view with name specified under view_name parameter. Ensures that
the SQL code is valid and that the view is created. '''
try:
df = spark.sql(sql_string)
except py4j.protocol.Py4JJavaError:
raise Exception(f'Invalid SQL code passed in by {sql_string}.')
return
df.createOrReplaceTempView(view_name)
return df
错误代码为:
org.apache.spark.sql.catalyst.parser.ParseException:
---------------------------------------------------------------------------
Py4JJavaError Traceback (most recent call last)
/databricks/spark/python/pyspark/sql/utils.py in deco(*a, **kw)
62 try:
---> 63 return f(*a, **kw)
64 except py4j.protocol.Py4JJavaError as e:
/databricks/spark/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py in get_return_value(answer,
gateway_client, target_id, name)
327 "An error occurred while calling {0}{1}{2}.\n".
--> 328 format(target_id, ".", name), value)
329 else:
Py4JJavaError: An error occurred while calling o213.sql.
: org.apache.spark.sql.catalyst.parser.ParseException:
mismatched input 'sd' expecting {'(', 'SELECT', 'FROM', 'ADD', 'DESC', 'WITH', 'VALUES',
'CREATE', 'TABLE', 'INSERT', 'DELETE', 'DESCRIBE', 'EXPLAIN', 'SHOW', 'USE', 'DROP', 'ALTER',
'MAP', 'SET', 'RESET', 'START', 'COMMIT', 'ROLLBACK', 'MERGE', 'UPDATE', 'CONVERT', 'REDUCE',
'REFRESH', 'CLEAR', 'CACHE', 'UNCACHE', 'DFS', 'TRUNCATE', 'ANALYZE', 'LIST', 'REVOKE',
'GRANT', 'LOCK', 'UNLOCK', 'MSCK', 'EXPORT', 'IMPORT', 'LOAD', 'OPTIMIZE', 'COPY'}(line 1, pos
0)
== SQL ==
sd
^^^
当我在 sql_string 参数中使用无效的 sql 运行函数时,错误不会被处理,它仍然会引发相同的错误代码,而不是 'Exception(f'Invalid SQL code pass in by {sql_string}.')'。如果有人能弄清楚为什么没有正确处理,我将不胜感激:)
解决方案
推荐阅读
- ios - 有没有解决方案从 xcode 项目中删除 lint 以及所有相关的东西?
- jquery - 如何对ajax加载的内容执行jquery每个功能?
- python-3.x - 尝试通过 pykafka 连接到 kafka 时,在所有 docker 映像中出现 import _rd_kafka 错误
- node.js - Shopify React Next 无法读取未定义的属性“/_app”
- javascript - 如何使标签栏粘在页面底部?
- firebase - 如何从firestore中检索经纬度?
- plugins - 在 TYPO3 v10.4 中获取当前 pageid
- java - 访问多维字符串数组时在Java中获取ArrayIndexOutOfBoundsException
- unity3d - 自上而下或等距视图中的 Unity Frostrum Culling
- c - 程序在执行通过管道和 fork 给出的 shell 命令期间挂起