请说明在 Spark SQL 中,通过 SQL 语句对 DataFrame 进行查询的操作方式。
考察说明
考查对 Spark SQL 中 SQL 查询 DataFrame 基本流程的掌握,包括临时视图的概念和操作步骤。
回答思路
- 【回答框架 1】Spark SQL 允许使用 SQL 语句查询 DataFrame,核心步骤是先注册临时视图,然后通过 spark.sql 执行 SQL 查询。临时视图可以是局部或全局的,通过 createOrReplaceTempView 创建局部视图,createGlobalTempView 创建全局视图。
- 【回答框架 2】局部视图的完整名称是 temp view,仅当前 SparkSession 可见;全局视图跨会话可见,但使用时需要加上 global_temp 前缀。注册视图时建议使用 createOrReplaceTempView 以便覆盖同名视图。
- 【回答框架 3】执行 SQL 查询的方式是 spark.sql(sqlText),该方法返回一个新的 DataFrame。可以通过 show、collect、selectExpr 等方法查看结果。注册视图的列名和类型与 DataFrame 的 schema 保持一致,SQL 中可直接引用。
- 【回答框架 4】对比使用 DataFrame API 的 select、filter 等操作,SQL 查询更直观,适合复杂 join 和聚合。但需要注意 SQL 中的列名大小写、特殊字符可能需要转义,并确保视图名不冲突。
- 【关键点 1】核心流程:创建临时视图 + spark.sql 执行查询。
- 【关键点 2】createOrReplaceTempView 注册局部视图,跨会话使用 global_temp 前缀。
- 【关键点 3】sql 返回 DataFrame,可继续使用 DataFrame API 操作。
- 【关键点 4】视图名与 schema 影响 SQL 查询的准确性和性能。
- 【易错点 1】忘记注册视图就执行 SQL 会报错找不到表或视图。
- 【易错点 2】混淆局部和全局视图的作用域,全局视图调用时必须带 global_temp 前缀。
- 【易错点 3】SQL 中列名区分大小写,可能导致列解析失败。