aboutsummaryrefslogtreecommitdiff
path: root/mllib/src
diff options
context:
space:
mode:
authorWenchen Fan <wenchen@databricks.com>2016-09-06 10:36:00 +0800
committerWenchen Fan <wenchen@databricks.com>2016-09-06 10:36:00 +0800
commit8d08f43d09157b98e559c0be6ce6fd571a35e0d1 (patch)
treebdd145e566a7ca014fad3376d799ec2e5e74f3ff /mllib/src
parent6d86403d8b252776effcddd71338b4d21a224f9b (diff)
downloadspark-8d08f43d09157b98e559c0be6ce6fd571a35e0d1.tar.gz
spark-8d08f43d09157b98e559c0be6ce6fd571a35e0d1.tar.bz2
spark-8d08f43d09157b98e559c0be6ce6fd571a35e0d1.zip
[SPARK-17279][SQL] better error message for exceptions during ScalaUDF execution
## What changes were proposed in this pull request? If `ScalaUDF` throws exceptions during executing user code, sometimes it's hard for users to figure out what's wrong, especially when they use Spark shell. An example ``` org.apache.spark.SparkException: Job aborted due to stage failure: Task 12 in stage 325.0 failed 4 times, most recent failure: Lost task 12.3 in stage 325.0 (TID 35622, 10.0.207.202): java.lang.NullPointerException at line8414e872fb8b42aba390efc153d1611a12.$read$$iwC$$iwC$$iwC$$iwC$$anonfun$2.apply(<console>:40) at line8414e872fb8b42aba390efc153d1611a12.$read$$iwC$$iwC$$iwC$$iwC$$anonfun$2.apply(<console>:40) at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIterator.processNext(Unknown Source) ... ``` We should catch these exceptions and rethrow them with better error message, to say that the exception is happened in scala udf. This PR also does some clean up for `ScalaUDF` and add a unit test suite for it. ## How was this patch tested? the new test suite Author: Wenchen Fan <wenchen@databricks.com> Closes #14850 from cloud-fan/npe.
Diffstat (limited to 'mllib/src')
-rw-r--r--mllib/src/test/scala/org/apache/spark/ml/recommendation/ALSSuite.scala16
1 files changed, 8 insertions, 8 deletions
diff --git a/mllib/src/test/scala/org/apache/spark/ml/recommendation/ALSSuite.scala b/mllib/src/test/scala/org/apache/spark/ml/recommendation/ALSSuite.scala
index e8ed50acf8..d0aa2cdfe0 100644
--- a/mllib/src/test/scala/org/apache/spark/ml/recommendation/ALSSuite.scala
+++ b/mllib/src/test/scala/org/apache/spark/ml/recommendation/ALSSuite.scala
@@ -510,18 +510,18 @@ class ALSSuite
(1, 1L, 1d, 0, 0L, 0d, 5.0)
).toDF("user", "user_big", "user_small", "item", "item_big", "item_small", "rating")
withClue("fit should fail when ids exceed integer range. ") {
- assert(intercept[IllegalArgumentException] {
+ assert(intercept[SparkException] {
als.fit(df.select(df("user_big").as("user"), df("item"), df("rating")))
- }.getMessage.contains("was out of Integer range"))
- assert(intercept[IllegalArgumentException] {
+ }.getCause.getMessage.contains("was out of Integer range"))
+ assert(intercept[SparkException] {
als.fit(df.select(df("user_small").as("user"), df("item"), df("rating")))
- }.getMessage.contains("was out of Integer range"))
- assert(intercept[IllegalArgumentException] {
+ }.getCause.getMessage.contains("was out of Integer range"))
+ assert(intercept[SparkException] {
als.fit(df.select(df("item_big").as("item"), df("user"), df("rating")))
- }.getMessage.contains("was out of Integer range"))
- assert(intercept[IllegalArgumentException] {
+ }.getCause.getMessage.contains("was out of Integer range"))
+ assert(intercept[SparkException] {
als.fit(df.select(df("item_small").as("item"), df("user"), df("rating")))
- }.getMessage.contains("was out of Integer range"))
+ }.getCause.getMessage.contains("was out of Integer range"))
}
withClue("transform should fail when ids exceed integer range. ") {
val model = als.fit(df)