我想找到一个Spark自定义数据源实现,它本身只是基于动态配置从中选择并返回一些现有的数据源实现。例如,给定任意配置键“ MyDataSource”,在某种情况下,它可能会返回Parquet数据源,而在另一种情况下,它可能会返回Avro数据源,具体取决于运行时的配置文件。
有人已经这样做了吗?
您不需要实现数据源,可以在驱动程序中创建此逻辑来选择要读取的格式。例如:
val sparkSession = ...
trait Source
case class Parquet(path: String) extends Source
case class Jdbc(url: String, port: Int) extends Source
def readSource(s: Source)(spark: SparkSession): DataFrame = s match {
case Parquet(path) => spark.read.parquet(path)
case Jdbc(url, port) => ...
}
val aSourceFromConfig: Source = ...
val df: DataFrame = readSource(aSourceFromConfig)(spark)