web-dev-qa-db-ja.com

spark.sql.crossJoin.enabled for Spark 2.x

'preview' Google DataProc Image1.1をSpark 2.0.0で使用しています。操作の1つを完了するには、デカルト積を完了する必要があります。バージョン2.0.0以降、=があります。 spark構成パラメーターが作成され(spark.sql.cross Join.enabled)、デカルト積を禁止し、例外がスローされます。できれば、を使用して、spark.sql.crossJoin.enabled = trueを設定するにはどうすればよいですか。初期化アクション?spark.sql.crossJoin.enabled=true

10
Stijn

Dataprocで構成設定のデフォルト値を変更する場合、initアクションも必要ありません。コマンドラインからクラスターを作成するときに、 -propertiesフラグ を使用できます。

gcloud dataproc clusters create --properties spark:spark.sql.crossJoin.enabled=true my-cluster ...
5
Dennis Huo

Spark> = 3.0

spark.sql.crossJoin.enableはデフォルトでtrueです( SPARK-28621 )。

スパーク> = 2.1

crossJoinを使用できます:

df1.crossJoin(df2)

これにより、意図が明確になり、意図しないクロス結合から保護するために、より保守的な構成が維持されます。

Spark 2.0

SQLプロパティは、実行時にRuntimeConfig.setメソッドを使用して動的に設定できるため、呼び出すことができるはずです。

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

デカルト積を明示的に許可したいときはいつでも。

24
zero323

TPCDSクエリセットベンチマークには、_CROSS JOINS_を含むクエリがあり、明示的に_CROSS JOIN_を書き込むか、Sparkのデフォルトプロパティを動的にtrue Spark.conf.set("spark.sql.crossJoin.enabled", true)に設定しない限り、例外エラーが発生します。

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

1
Pat

私はそれがすべきだと思います

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

そうでなければそれは与えるでしょう

NameError:名前 'true'が定義されていません

0
lokesh