SQL面试题更新 2026-08-03

在 Spark SQL 中,Schema 通常通过哪些方式定义?当数据源不提供明确的 Schema 信息时,Spark 又是如何动态推断出数据结构的?

考察说明

考查对 Spark SQL Schema 定义方式及反射推断机制的理解。

回答思路

  1. 【回答框架 1】Schema 定义主要有两种途径:一是使用 StructType 编程式定义,通过 add 方法添加字段,可指定字段名、类型及可空性;二是使用 DDL 字符串,如 "id INT, name STRING",Spark 会解析为 StructType。
  2. 【回答框架 2】动态推断 Schema 常见于读取无格式信息的文件,如 JSON。Spark 读取时会扫描数据(可能需要采样),自动推断各字段的类型和嵌套结构,并以 StructType 表示。此过程由 spark.sql.json.enablePartialScan 等参数控制,但不一定总是最优。
  3. 【关键点 1】StructType 和 DDL 字符串是定义 Schema 的两种主要方式。
  4. 【关键点 2】动态推断依赖于数据扫描和类型推断,可能对特殊值或大规模数据产生不准确结果。
  5. 【易错点 1】动态推断在数据量巨大时可能耗时,且对空值或异常数据推断可能不准确。
  6. 【易错点 2】不要仅依赖动态推断,对于关键数据建议显式定义 Schema 以保证类型安全和性能。