Skip to content

Commit 95ae030

Browse files
author
Joseph Batchik
committed
changed the new trait to be used as a mixin for data source to register themselves
1 parent 74db85e commit 95ae030

File tree

13 files changed

+29
-38
lines changed

13 files changed

+29
-38
lines changed

sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/ddl.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ private[sql] class DDLParser(
197197
private[sql] object ResolvedDataSource extends Logging {
198198

199199
private lazy val loader = Utils.getContextOrSparkClassLoader
200-
private lazy val serviceLoader = ServiceLoader.load(classOf[DataSourceProvider], loader)
200+
private lazy val serviceLoader = ServiceLoader.load(classOf[DataSourceRegister], loader)
201201

202202
/** Tries to load the particular class */
203203
private def tryLoad(provider: String): Option[Class[_]] = try {
@@ -213,9 +213,8 @@ private[sql] object ResolvedDataSource extends Logging {
213213
/** Given a provider name, look up the data source class definition. */
214214
def lookupDataSource(provider: String): Class[_] = {
215215
serviceLoader.iterator().filter(_.format() == provider).toList match {
216-
case Nil => tryLoad(provider).orElse(tryLoad(s"$provider.DefaultSource")).getOrElse {
217-
sys.error(s"Failed to load class for data source: $provider")
218-
}
216+
case Nil => tryLoad(provider).orElse(tryLoad(s"$provider.DefaultSource"))
217+
.getOrElse(sys.error(s"Failed to load class for data source: $provider"))
219218
case head :: Nil => head.getClass
220219
case sources => sys.error(s"Multiple sources found for $provider, " +
221220
s"(${sources.map(_.getClass.getName).mkString(", ")}), " +

sql/core/src/main/scala/org/apache/spark/sql/jdbc/JDBCRelation.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,9 @@ private[sql] object JDBCRelation {
7777
}
7878
}
7979

80-
private[sql] class DefaultSource extends RelationProvider {
80+
private[sql] class DefaultSource extends RelationProvider with DataSourceRegister {
8181

82-
override def format(): String = "jdbc"
82+
def format(): String = "jdbc"
8383

8484
/** Returns a new base relation with the given parameters. */
8585
override def createRelation(

sql/core/src/main/scala/org/apache/spark/sql/json/JSONRelation.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ import org.apache.spark.sql.{DataFrame, Row, SQLContext, SaveMode}
3232
private[sql] class DefaultSource
3333
extends RelationProvider
3434
with SchemaRelationProvider
35-
with CreatableRelationProvider {
35+
with CreatableRelationProvider with DataSourceRegister {
3636

37-
override def format(): String = "json"
37+
def format(): String = "json"
3838

3939
private def checkPath(parameters: Map[String, String]): String = {
4040
parameters.getOrElse("path", sys.error("'path' must be specified for json data."))

sql/core/src/main/scala/org/apache/spark/sql/parquet/ParquetRelation.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ import org.apache.spark.sql.types.{DataType, StructType}
5050
import org.apache.spark.util.{SerializableConfiguration, Utils}
5151

5252

53-
private[sql] class DefaultSource extends HadoopFsRelationProvider {
53+
private[sql] class DefaultSource extends HadoopFsRelationProvider with DataSourceRegister {
5454

55-
override def format(): String = "parquet"
55+
def format(): String = "parquet"
5656

5757
override def createRelation(
5858
sqlContext: SQLContext,

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,23 +39,23 @@ import org.apache.spark.util.SerializableConfiguration
3939

4040
/**
4141
* ::DeveloperApi::
42-
* Base trait for all relation providers. All relation providers need to provide a string
43-
* representing the format they load. ex: parquet.DefaultSource.format = "parquet".
44-
* This allows users to specify that string as the format to read / write instead of providing
45-
* the entire class.
42+
* Data sources should implement this trait so that they can register an alias to their data source.
43+
* This allows users to give the data source alias as the format type over the fully qualified
44+
* class name.
45+
*
46+
* ex: parquet.DefaultSource.format = "parquet".
4647
*
4748
* A new instance of this class with be instantiated each time a DDL call is made.
4849
*/
4950
@DeveloperApi
50-
trait DataSourceProvider {
51+
trait DataSourceRegister {
5152

5253
/**
53-
* The string that represents the format that this data source provider uses. By default, it is
54-
* the name of the class, ex: "org.apache.spark.sql.parquet.DefaultSource". This should be
54+
* The string that represents the format that this data source provider uses. This is
5555
* overridden by children to provide a nice alias for the data source,
5656
* ex: override def format(): String = "parquet"
5757
*/
58-
def format(): String = getClass.getName
58+
def format(): String
5959
}
6060

6161
/**
@@ -74,7 +74,7 @@ trait DataSourceProvider {
7474
* @since 1.3.0
7575
*/
7676
@DeveloperApi
77-
trait RelationProvider extends DataSourceProvider {
77+
trait RelationProvider {
7878
/**
7979
* Returns a new base relation with the given parameters.
8080
* Note: the parameters' keywords are case insensitive and this insensitivity is enforced
@@ -105,7 +105,7 @@ trait RelationProvider extends DataSourceProvider {
105105
* @since 1.3.0
106106
*/
107107
@DeveloperApi
108-
trait SchemaRelationProvider extends DataSourceProvider {
108+
trait SchemaRelationProvider {
109109
/**
110110
* Returns a new base relation with the given parameters and user defined schema.
111111
* Note: the parameters' keywords are case insensitive and this insensitivity is enforced
@@ -141,7 +141,7 @@ trait SchemaRelationProvider extends DataSourceProvider {
141141
* @since 1.4.0
142142
*/
143143
@Experimental
144-
trait HadoopFsRelationProvider extends DataSourceProvider {
144+
trait HadoopFsRelationProvider {
145145
/**
146146
* Returns a new base relation with the given parameters, a user defined schema, and a list of
147147
* partition columns. Note: the parameters' keywords are case insensitive and this insensitivity
@@ -161,7 +161,7 @@ trait HadoopFsRelationProvider extends DataSourceProvider {
161161
* @since 1.3.0
162162
*/
163163
@DeveloperApi
164-
trait CreatableRelationProvider extends DataSourceProvider {
164+
trait CreatableRelationProvider {
165165
/**
166166
* Creates a relation with the given parameters based on the contents of the given
167167
* DataFrame. The mode specifies the expected behavior of createRelation when

sql/core/src/test/scala/org/apache/spark/sql/sources/DDLSourceLoadSuite.scala

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ package org.apache.spark.sql.sources
2020
import org.apache.spark.sql.SQLContext
2121
import org.apache.spark.sql.types.{StringType, StructField, StructType}
2222

23-
class FakeSourceOne extends RelationProvider {
23+
class FakeSourceOne extends RelationProvider with DataSourceRegister {
2424

25-
override def format(): String = "Fluet da Bomb"
25+
def format(): String = "Fluet da Bomb"
2626

2727
override def createRelation(cont: SQLContext, param: Map[String, String]): BaseRelation =
2828
new BaseRelation {
@@ -33,9 +33,9 @@ class FakeSourceOne extends RelationProvider {
3333
}
3434
}
3535

36-
class FakeSourceTwo extends RelationProvider {
36+
class FakeSourceTwo extends RelationProvider with DataSourceRegister {
3737

38-
override def format(): String = "Fluet da Bomb"
38+
def format(): String = "Fluet da Bomb"
3939

4040
override def createRelation(cont: SQLContext, param: Map[String, String]): BaseRelation =
4141
new BaseRelation {
@@ -46,9 +46,9 @@ class FakeSourceTwo extends RelationProvider {
4646
}
4747
}
4848

49-
class FakeSourceThree extends RelationProvider {
49+
class FakeSourceThree extends RelationProvider with DataSourceRegister {
5050

51-
override def format(): String = "gathering quorum"
51+
def format(): String = "gathering quorum"
5252

5353
override def createRelation(cont: SQLContext, param: Map[String, String]): BaseRelation =
5454
new BaseRelation {

sql/core/src/test/scala/org/apache/spark/sql/sources/FilteredScanSuite.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ import org.apache.spark.sql.types._
2626

2727
class FilteredScanSource extends RelationProvider {
2828

29-
override def format(): String = "test format"
30-
3129
override def createRelation(
3230
sqlContext: SQLContext,
3331
parameters: Map[String, String]): BaseRelation = {

sql/core/src/test/scala/org/apache/spark/sql/sources/PrunedScanSuite.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ import org.apache.spark.sql.types._
2525

2626
class PrunedScanSource extends RelationProvider {
2727

28-
override def format(): String = "test format"
29-
3028
override def createRelation(
3129
sqlContext: SQLContext,
3230
parameters: Map[String, String]): BaseRelation = {

0 commit comments

Comments
 (0)