Apache Spark 顾问分析由 Apache Spark 执行的命令和代码,并对笔记本的运行提供实时建议。 Apache Spark 顾问具有内置模式,可帮助用户避免常见错误。 它提供代码优化、执行错误分析以及查找失败的根本原因的建议。
内置建议
Spark 顾问是与Pulss集成的工具,提供内置模式用于检测和解决 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 Notebook 级别访问 Spark 顾问设置,以享受其优势,并确保高效笔记本创作体验。