SparkSQL2.0扩展外部数据源原理(读取HDFS文件)

SparkSQL专门为读取HDFS上的文件开的外部数据源接口,spark-parquet、csv、json等都是这种方式。

DefaultSource

入口类,用来建立外部数据源连接,SparkSQL默认会找这个名字,不要改类名。基本所有接口都在这个类里

private[tsfile] class DefaultSource extends FileFormat with DataSourceRegister {

  class TSFileDataSourceException(message: String, cause: Throwable)
    extends Exception(message, cause) {
    def this(message: String) = this(message, null)
  }

  override def equals(other: Any): Boolean = other match {
    case _: DefaultSource => true
    case _ => false
  }
	

inferSchema接口

返回文件对应的表结构

参数说明:

files是连接的文件,返回SparkSQL的一张表结构。

用xxx代表文件后缀,不同用法对应不同的参数:

  • 通配符指定路径
read.xxx("hdfs:///data/*/*.xxx")

这时files中包括所有匹配到的文件

  • 指定文件夹
read.xxx("hdfs:///data/")

这时files中会包括/data文件夹下的所有文件

  • 指定文件
read.xxx("hdfs:///data/a.xxx")

这时files中就只有一个a.xxx文件

	//返回表结构,StrucType里包含StructField的list,每个StructField是一列
  override def inferSchema(
                            spark: SparkSession,
                            options: Map[String, String],
                            files: Seq[FileStatus]): Option[StructType] = {
    val conf = spark.sparkContext.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值