2016-08-17 15 views
7

Używam "podglądu" Google DataProc Image 1.1 ze Spark 2.0.0. Aby wykonać jedną z moich operacji, muszę wypełnić produkt kartezjański. Od wersji 2.0.0 został utworzony parametr konfiguracyjny iskry (spark.sql.cross Join.enabled), który zakazuje produktów kartezjańskich i zgłoszony wyjątek. Jak ustawić spark.sql.crossJoin.enabled = true, najlepiej za pomocą akcji inicjującej? spark.sql.crossJoin.enabled=truespark.sql.crossJoin.enabled dla Spark 2.x

Odpowiedz

4

Aby zmienić domyślne wartości ustawień konfiguracyjnych w Dataproc, nie trzeba nawet akcję startowy, można użyć --properties flag podczas tworzenia klastra z linii poleceń:

gcloud dataproc clusters create --properties spark:spark.sql.crossJoin.enabled=true my-cluster ... 
+0

To działa! Jeszcze raz dziękuję, Dennis! – Stijn

15

Spark 2.1+

Można użyć crossJoin:

df1.crossJoin(df2) 

To sprawia, że ​​intencją wyraźny i zachowuje bardziej konserwatywne konfiguracji w celu ochrony przed niezamierzonym krzyż łączy.

Spark 2.0

właściwości SQL można ustawić dynamicznie na starcie z RuntimeConfig.set metody, więc powinieneś być w stanie wywołać

spark.conf.set("spark.sql.crossJoin.enabled", true) 

gdy chcesz jawnie zezwolić iloczyn kartezjański.

+1

To działa! Dziękuję Ci! – Stijn

+1

Wygląda na to, że 'crossJoin()' nie jest dostępne w 'DataFrame' /' Dataset' przed isknięciem 2.1. –

+1

@RickHaffey dla wersji wcześniejszych niż Spark 2.1, użyj API 'dataset.join (rightDataset)' z opcją konfiguracji "spark.conf.set (" spark.sql.crossJoin.enabled ", true)'. Ten styl działa również ze Spark 2.1, ale interfejs API .crossJoin jest idealny, ponieważ jest bardziej wyraźny. – Garren

1

Zbiór rekordów TPCDS testy porównawcze mają zapytania, które zawierają CROSS JOINS i chyba, że ​​jednoznacznie napiszesz CROSS JOIN lub dynamicznie ustawisz domyślną właściwość Sparka na true Spark.conf.set("spark.sql.crossJoin.enabled", true), wystąpi błąd wyjątku.

Błąd pojawia się w zapytaniach TPCDS 28,61, 88 i 90, ponieważ pierwotna składnia zapytania z Komendy Przetwarzania Transakcji (TPC) zawiera przecinki, a domyślna operacja łączenia Sparka jest połączeniem wewnętrznym. Mój zespół również zdecydował się użyć CROSS JOIN zamiast zmieniać domyślne właściwości Sparka.

Powiązane problemy