提供笔记本实时建议的 Apache Spark 顾问

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

内置建议

Spark 顾问是与 Impulse 集成的工具,提供用于检测和解决 Apache 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,以加速此查询。

用户体验

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

  • 信息 显示信息的屏幕截图。

  • 警告 显示警告的屏幕截图。

  • 错误 显示错误的屏幕截图。

Spark 顾问设置

借助 Spark 顾问设置可以根据需要选择是显示还是隐藏特定类型的 Spark 建议。 此外,还可以根据自己的偏好灵活地为工作区中的笔记本启用或禁用 Spark 顾问。

可以访问 Fabric 笔记本级别的 Spark 顾问设置,从而在享受其优势的同时,确保高效的笔记本创作体验。

显示“Spark 顾问设置”的屏幕截图。