我看到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)。