我看到Databricks-Question和不理解为什么在SQL查询中使用UDF导致笛卡尔积?
- 为什么使用UDF的导致笛卡尔乘积,而不是一个完整的外部联接?很明显,笛卡尔产品比全外连接(Joins就是一个例子)要多得多,这是潜在的性能 命中。
- 在Databricks-Question中给出的示例中,强制笛卡尔乘积的外连接的方法是?
引述Databricks-Question这里:
我有一个使用SQLContext执行对数据流 SQL语句星火流应用。当我在 Scala中注册一个自定义UDF时,流应用程序的性能显着下降 。
声明1::下面详细
Select col1, col2 from table1 as t1 join table2 as t2 on t1.foo = t2.bar
声明2:
Select col1, col2 from table1 as t1 join table2 as t2 on equals(t1.foo,t2.bar)
我注册使用SQLContext定制UDF如下:
sqlc.udf.register("equals", (s1: String, s2:String) => s1 == s2)
对于相同的输入和Spark配置,与Statement1相比,Statement2的性能 明显更差(接近100X)。