UDF 和笛卡尔积
理解问题
在 Spark SQL 中,使用自定义 User - SQL 查询中的定义函数 (UDF) 有时会导致笛卡尔积计算预期的完全外连接。出现此性能问题的原因是 UDF 的使用引入了任意且不确定的函数,使得优化器在不评估所有可能的输入组合的情况下确定其值具有挑战性。
解决方案
与 UDF 不同,完全外连接 (t1.foo = t2.bar) 中的简单相等条件具有可预测的行为。优化器可以分别根据 foo 和 bar 打乱 t1 和 t2 行,以高效计算连接。
防止笛卡尔积
缺少修改 Spark SQL引擎中,没有直接的方法可以强制对 UDF 引入的笛卡尔积进行外部联接。这种限制源于 UDF 的固有性质,它需要评估所有可能的参数组合以确定它们的值。
以上是为什么 Spark SQL UDF 有时会导致笛卡尔积而不是外连接?的详细内容。更多信息请关注PHP中文网其他相关文章!