Skip to content

Commit a8f51b8

Browse files
committed
[SPARK-6458][SQL] Better error messages for invalid data sources
Avoid unclear match errors and use `AnalysisException`. Author: Michael Armbrust <[email protected]> Closes #5158 from marmbrus/dataSourceError and squashes the following commits: af9f82a [Michael Armbrust] Yins comment 90c6ba4 [Michael Armbrust] Better error messages for invalid data sources
1 parent cbeaf9e commit a8f51b8

File tree

1 file changed

+9
-3
lines changed
  • sql/core/src/main/scala/org/apache/spark/sql/sources

1 file changed

+9
-3
lines changed

sql/core/src/main/scala/org/apache/spark/sql/sources/ddl.scala

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import scala.language.existentials
2121
import scala.language.implicitConversions
2222

2323
import org.apache.spark.Logging
24-
import org.apache.spark.sql.{SaveMode, DataFrame, SQLContext}
24+
import org.apache.spark.sql.{AnalysisException, SaveMode, DataFrame, SQLContext}
2525
import org.apache.spark.sql.catalyst.plans.logical._
2626
import org.apache.spark.sql.catalyst.AbstractSparkSQLParser
2727
import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation
@@ -204,19 +204,25 @@ private[sql] object ResolvedDataSource {
204204
provider: String,
205205
options: Map[String, String]): ResolvedDataSource = {
206206
val clazz: Class[_] = lookupDataSource(provider)
207+
def className = clazz.getCanonicalName
207208
val relation = userSpecifiedSchema match {
208209
case Some(schema: StructType) => clazz.newInstance() match {
209210
case dataSource: SchemaRelationProvider =>
210211
dataSource.createRelation(sqlContext, new CaseInsensitiveMap(options), schema)
211212
case dataSource: org.apache.spark.sql.sources.RelationProvider =>
212-
sys.error(s"${clazz.getCanonicalName} does not allow user-specified schemas.")
213+
throw new AnalysisException(s"$className does not allow user-specified schemas.")
214+
case _ =>
215+
throw new AnalysisException(s"$className is not a RelationProvider.")
213216
}
214217

215218
case None => clazz.newInstance() match {
216219
case dataSource: RelationProvider =>
217220
dataSource.createRelation(sqlContext, new CaseInsensitiveMap(options))
218221
case dataSource: org.apache.spark.sql.sources.SchemaRelationProvider =>
219-
sys.error(s"A schema needs to be specified when using ${clazz.getCanonicalName}.")
222+
throw new AnalysisException(
223+
s"A schema needs to be specified when using $className.")
224+
case _ =>
225+
throw new AnalysisException(s"$className is not a RelationProvider.")
220226
}
221227
}
222228
new ResolvedDataSource(clazz, relation)

0 commit comments

Comments
 (0)