Azure Synapse Analytics 中的 Apache Spark 顾问(预览版)

Apache Spark 顾问分析 Spark 运行的命令和代码,并针对 Notebook 运行显示实时建议。 Spark 顾问具有内置模式,可帮助用户避免常见错误、提供代码优化建议、执行错误分析并找出故障的根本原因。

内置建议

使用“randomSplit”时,可能返回不一致的结果

使用“randomSplit”方法的结果时,可能返回不一致或不准确的结果。 请在使用“randomSplit”方法之前使用 Apache Spark (RDD) 缓存。

方法 randomSplit() 等效于对数据帧多次执行 sample(),其中每个样本在分区内重新提取、分区和排序数据帧。 跨分区的数据分布和排序顺序对于 randomSplit() 和 sample() 都很重要。 如果对数据重新提取进行更改,则可能会出现重复项,或者在拆分时丢失值,并且使用相同种子的相同样本可能会产生不同的结果。

这些不一致可能不会在每次运行时都发生,但要完全消除它们,请缓存数据帧、对列重新分区,或应用聚合函数(例如 groupBy)。

表/视图名称已被使用

已存在与创建的表同名的视图,或已存在与创建的视图同名的表。 在查询或应用程序中使用此名称时,无论先创建哪个视图,都将只返回视图。 为避免冲突,请重命名表或视图。

无法识别提示

所选查询包含无法识别的提示。 请验证提示是否拼写正确。

spark.sql("SELECT /*+ unknownHint */ * FROM t1")

找不到指定的关系名称

找不到提示中指定的关系。 请验证关系是否拼写正确并且在提示范围内可访问。

spark.sql("SELECT /*+ BROADCAST(unknownTable) */ * FROM t1 INNER JOIN t2 ON t1.str = t2.str")

查询中的提示阻止应用另一个提示

所选查询包含一个提示,该提示阻止应用另一个提示。

spark.sql("SELECT /*+ BROADCAST(t1), MERGE(t1, t2) */ * FROM t1 INNER JOIN t2 ON t1.str = t2.str")

启用“spark.advise.divisionExprConvertRule.enable”以减少舍入误差传播

此查询包含 Double 类型的表达式。 建议启用“spark.advise.divisionExprConvertRule.enable”配置,该配置有助于减少除法表达式并减少舍入误差传播。

"t.a/t.b/t.c" convert into "t.a/(t.b * t.c)"

启用“spark.advise.nonEqJoinConvertRule.enable”以提高查询性能

由于查询中的“Or”条件,此查询包含非常耗时的联接。 建议启用“spark.advise.nonEqJoinConvertRule.enable”配置,该配置有助于将“Or”条件触发的联接转换为 SMJ 或 BHJ,以加速此查询。

使用小文件压缩优化增量表

此查询针对包含许多小文件的增量表。 若要提高查询性能,请对增量表运行 OPTIMIZE 命令。 有关更多详细信息,请参阅此文章

使用 ZOrder 优化增量表

此查询针对增量表,并包含选择性很强的筛选器。 若要提高查询性能,请对增量表运行 OPTIMIZE ZORDER BY 命令。 有关更多详细信息,请参阅此文章

用户体验

Apache Spark 顾问在 Notebook 单元格输出中实时显示建议,包括信息、警告和错误。

  • 信息

    Screenshot showing for advice information.

  • 警告

    Screenshot showing for advice warning.

  • 错误

    Screenshot showing for advice error.

后续步骤

若要详细了解如何监视 Apache Spark 应用程序,请参阅使用 Synapse Studio 监视 Apache Spark 应用程序一文。

若要详细了解如何创建笔记本,请参阅如何使用 Synapse 笔记本