ホームページ >データベース >mysql チュートリアル >Spark SQL の UDF: 完全外部結合ではなくデカルト積を作成することがあるのはなぜですか?
Spark SQL では、SQL クエリ内でユーザー定義関数 (UDF) を利用すると、特に予期しない動作が発生する可能性があります。意図した完全外部結合ではなく、デカルト積が出現します。
UDF を使用する場合、Spark は UDF を任意の関数として扱い、評価のために考えられるすべての引数の組み合わせを考慮します。これには、すべてのペアを徹底的に検査するためのデカルト積が必要です。
UDF とは異なり、t1.foo = t2.bar のような基本的な等価比較は予測可能な動作を持ち、Spark を許可します。等価基準に基づいて t1 行と t2 行を効率的にシャッフルします。 UDF では、その予測不可能な性質のため、この最適化は行われません。
リレーショナル代数では、外部結合は基本的に自然結合として表現されますが、これは単に結合にすぎません。一般的な SQL エンジンの最適化。したがって、UDF を使用してデカルト積に対して外部結合を強制することは、Spark SQL エンジン自体を変更しない限り、すぐには実現できないことを認識することが重要です。
以上がSpark SQL の UDF: 完全外部結合ではなくデカルト積を作成することがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。