更新时间:2025-02-28 GMT+08:00
分享

Spark SQL开发规范

Spark SQL嵌套语法建议

Spark的“spark.sql.codegen.wholeStage”参数默认为“true”,当SQL嵌套逻辑过多时,Spark Driver在编译解析SQL生成代码过程中的压力就会过大,发生oom报错。因此,建议如下:

  • 整改Spark SQL命令。
  • 修改“spark.sql.codegen.wholeStage”参数为“false”,使得Spark Driver侧不生成完整的Java代码。

Spark SQL中having使用建议

正常情况下having位于group by后用于筛选分组后的各组数据,Spark 2.3未规范校验having,执行正常;Spark 2.4开始严格校验,如果在没有group by的情况下使用having,会导致编译报错,版本间存在差异。因此,建议如下:

  • 整改SQL命令,用where代替having规范使用。

  • Spark 2.4版本,设置参数“spark.sql.legacy.parser.havingWithoutGroupByAsWhere”的值为“true”。

相关文档