Compartir a través de

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 笔记本