2016-08-17 4 views
7

私は、Spark 2.0.0で 'preview' Google DataProc Image 1.1を使用しています。私の操作の1つを完了するために、私はデカルト製品を完成させなければならない。バージョン2.0.0以降、デカルト製品を禁止するspark構成パラメータ(spark.sql.cross Join.enabled)が作成され、例外がスローされています。できれば初期化アクションを使用してspark.sql.crossJoin.enabled = trueを設定するにはどうすればよいですか? spark.sql.crossJoin.enabled=truespark.sql.crossJoin.enabled for Spark 2.x

答えて

4

Dataproc内の構成設定のデフォルト値を変更するために、あなたも、コマンドラインからクラスタを作成するときに--properties flagを使用することができ、初期化アクションは必要ありません。

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

これは機能します!ありがとう、デニス! – Stijn

15

スパーク2.1+

あなたはcrossJoinを使用することができます。

df1.crossJoin(df2) 

それはあなたの意図が明示的になり、意図しないクロスが参加するからあなたを保護するための場所でより保守的な設定を保持します。あなたが明示的にデカルト積を許可したいとき

​​

を呼び出すことができるはずですので

スパーク2.0

SQLプロパティはRuntimeConfig.set方法で実行時に動的に設定することができます。

+1

これは機能します!ありがとうございました! – Stijn

+1

spark 2.1の前に 'crossJoin()'が 'DataFrame' /' Dataset'で利用できないようです。 –

+1

@RickHaffey Spark 2.1以前のバージョンでは、 'spark.conf.set(" spark.sql.crossJoin.enabled "、true)'設定オプションで 'dataset.join(rightDataset)' APIを使用してください。このスタイルはSpark 2.1でも動作しますが、より明示的なので、.crossJoin APIが理想的です。 – Garren

1

のTPCDクエリセットベンチマークにはCROSS JOINSを含むクエリがあり、CROSS JOINを明示的に記述するか、またはSparkのデフォルトプロパティをtrueに動的に設定しない限り、Spark.conf.set("spark.sql.crossJoin.enabled", true)は例外エラーに遭遇します。

トランザクション処理委員会(TPC)の元のクエリ構文にコンマが含まれ、Sparkの既定の結合操作が内部結合であるため、TPCDSクエリ28,61,88、および90にエラーが表示されます。私のチームはまた、Sparkのデフォルトプロパティを変更する代わりにCROSS JOINを使用することに決めました。