SQL面试题更新 2026-08-05

试述 Spark SQL 对接外部数据源(包括 JDBC、HDFS 等)的常用方式,并说明在实际应用中如何实现数据的读取导入与写出导出?

数据技术原理方案权衡问题排查HDFSSpark SQL

考察说明

考察候选人对 Spark SQL 外部数据源集成机制及数据读写实践的理解。

回答思路

  1. 【回答框架 1】Spark SQL 通过 DataFrameReader 和 DataFrameWriter 统一封装外部数据源读写。读取时调用 spark.read.format(...).options(...).load(),写出时调用 df.write.format(...).options(...).save(),底层由 DataSource API 的数据源实现完成数据解析与转换。
  2. 【回答框架 2】对接 HDFS 时通常直接使用 Parquet、ORC、JSON、CSV 等内置格式。读取示例:spark.read.parquet("hdfs://path");写出可指定分区列,如 df.write.partitionBy("dt").parquet(...),并可通过 mode("overwrite") 或 mode("append") 控制写入模式。
  3. 【回答框架 3】对接 JDBC 时通过 format("jdbc") 指定 url、dbtable、user、password 等选项。读取时可用 numPartitions 与 partitionColumn 实现并行分区拉取;写出时注意批次大小和事务边界,避免频繁提交。
  4. 【回答框架 4】数据导入导出还需考虑类型映射、字符编码、时间精度等兼容问题。例如 JDBC 的 DECIMAL 与 Spark 的 DecimalType 映射,HDFS 上小文件过多会降低读取性能,建议合理分区和文件大小。
  5. 【关键点 1】Spark SQL 通过 DataFrameReader/DataFrameWriter 统一读写外部数据源,核心是 DataSource API。
  6. 【关键点 2】HDFS 常用内置格式如 Parquet、ORC、JSON、CSV,支持分区与写入模式控制。
  7. 【关键点 3】JDBC 数据源通过 format('jdbc') 配置连接参数,可用 partitionColumn 与 numPartitions 提升并行读取。
  8. 【关键点 4】写出 JDBC 时注意控制批量大小,避免频繁 commit 导致性能问题。
  9. 【关键点 5】不同类型映射和文件布局优化是数据导入导出的常见实践要点。
  10. 【易错点 1】误以为 Spark SQL 只能通过 SQL 语句访问外部数据,而忽略 DataFrame API 的统一性。
  11. 【易错点 2】不明确 JDBC 读取默认是单分区,数据量大时性能差,需显式分区。
  12. 【易错点 3】忽略类型映射和兼容性检查,可能导致数据丢失或转换错误。