Ich verwende die "Vorschau" Google DataProc Image 1.1 mit Spark 2.0.0. Um eine meiner Operationen abzuschließen, muss ich ein kartesisches Produkt vervollständigen. Seit der Version 2.0.0 wurde ein Spark-Konfigurationsparameter erstellt (spark.sql.cross Join.enabled), der kartesische Produkte verbietet und eine Exception ausgelöst wird. Wie kann ich spark.sql.crossJoin.enabled = true setzen, vorzugsweise mit einer Initialisierungsaktion?
spark.sql.crossJoin.enabled=true
Um die Standardwerte der Konfigurationseinstellungen in Dataproc zu ändern, benötigen Sie nicht einmal eine init-Aktion. Sie können die - Eigenschaften-Flag beim Erstellen Ihres Clusters über die Befehlszeile:
%Vor%Spark 2.1 +
Sie können verwenden crossJoin
:
Es macht Ihre Absicht explizit und hält eine konservativere Konfiguration bereit, um Sie vor unbeabsichtigten Cross-Joins zu schützen.
Spark 2.0
SQL-Eigenschaften können zur Laufzeit mit der Methode RuntimeConfig.set
dynamisch gesetzt werden, so dass Sie
, wenn Sie das kartesische Produkt explizit zulassen möchten.
Die TPCDS-Abfragesetbenchmarks haben Abfragen, die CROSS JOINS
enthalten. Wenn Sie nicht explizit CROSS JOIN
schreiben oder die Standardeigenschaft von Spark auf true Spark.conf.set("spark.sql.crossJoin.enabled", true)
setzen, tritt ein Ausnahmefehler auf.
Der Fehler tritt bei den TPCDS-Abfragen 28, 61, 88 und 90 auf, weil die ursprüngliche Abfragesyntax von Transaction Processing Committee (TPC) Kommas enthält und Sparks Standard-Join-Operation eine innere Verknüpfung ist. Mein Team hat sich außerdem entschieden, CROSS JOIN
zu verwenden, anstatt Sparks Standardeigenschaften zu ändern.
Tags und Links apache-spark google-cloud-dataproc