spark.sql.crossJoin.enabled für Spark 2.x

7

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

    
Stijn 17.08.2016, 14:13
quelle

3 Antworten

4

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%     
Dennis Huo 17.08.2016, 15:32
quelle
15

Spark 2.1 +

Sie können verwenden crossJoin :

%Vor%

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

aufrufen können %Vor%

, wenn Sie das kartesische Produkt explizit zulassen möchten.

    
zero323 17.08.2016 14:56
quelle
1

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.

    
Pat 01.02.2017 00:35
quelle