Spark SQL Schema 定义方式

显式定义 Schema:

  • 使用 StructTypeStructField 明确定义每个字段的名称、数据类型和可空性
  • 支持 DDL 字符串格式定义
  • 可以从现有 DataFrame 复制 Schema

主要数据类型:

  • 基本类型:StringType、IntegerType、DoubleType、BooleanType等
  • 复杂类型:ArrayType、MapType、StructType
  • 时间类型:TimestampType、DateType

Schema 动态推断机制

自动推断(默认):

  • JSON/Parquet文件:基于文件内容自动推断完整Schema
  • CSV文件:默认所有列为字符串,需设置 inferSchema=true 进行类型推断

推断规则:

  1. 采样分析:Spark读取部分数据样本分析值模式
  2. 类型推导:根据实际值推导最合适的类型(整数→Int,小数→Double等)
  3. 空值处理:自动识别可为空的字段
  4. 嵌套结构:支持递归推断嵌套的Struct、Array、Map类型

配置选项:

spark.read.option("inferSchema", "true")  # 启用类型推断
spark.read.option("samplingRatio", 0.1)   # 调整采样比例

优势与限制:

  • 优势:简化开发,适应数据结构变化
  • 限制:推断可能不准确,性能开销较大,建议生产环境使用显式Schema
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐