Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions python/pyspark/sql/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -1079,6 +1079,12 @@ def test_capture_illegalargument_exception(self):
df = self.sqlCtx.createDataFrame([(1, 2)], ["a", "b"])
self.assertRaisesRegexp(IllegalArgumentException, "1024 is not in the permitted values",
lambda: df.select(sha2(df.a, 1024)).collect())
try:
df.select(sha2(df.a, 1024)).collect()
except IllegalArgumentException as e:
self.assertRegexpMatches(e.desc, "1024 is not in the permitted values")
self.assertRegexpMatches(e.stackTrace,
"org.apache.spark.sql.functions")

def test_with_column_with_existing_name(self):
keys = self.df.withColumn("key", self.df.key).select("key").collect()
Expand Down
19 changes: 15 additions & 4 deletions python/pyspark/sql/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,22 @@
import py4j


class AnalysisException(Exception):
class CapturedException(Exception):
def __init__(self, desc, stackTrace):
self.desc = desc
self.stackTrace = stackTrace

def __str__(self):
return repr(self.desc)


class AnalysisException(CapturedException):
"""
Failed to analyze a SQL query plan.
"""


class IllegalArgumentException(Exception):
class IllegalArgumentException(CapturedException):
"""
Passed an illegal or inappropriate argument.
"""
Expand All @@ -36,10 +45,12 @@ def deco(*a, **kw):
return f(*a, **kw)
except py4j.protocol.Py4JJavaError as e:
s = e.java_exception.toString()
stackTrace = '\n\t at '.join(map(lambda x: x.toString(),
e.java_exception.getStackTrace()))
if s.startswith('org.apache.spark.sql.AnalysisException: '):
raise AnalysisException(s.split(': ', 1)[1])
raise AnalysisException(s.split(': ', 1)[1], stackTrace)
if s.startswith('java.lang.IllegalArgumentException: '):
raise IllegalArgumentException(s.split(': ', 1)[1])
raise IllegalArgumentException(s.split(': ', 1)[1], stackTrace)
raise
return deco

Expand Down