Apache spark spark 2.x的spark.sql.crossJoin.enabled

Apache spark spark 2.x的spark.sql.crossJoin.enabled,apache-spark,google-cloud-dataproc,Apache Spark,Google Cloud Dataproc,我正在使用“预览”Google DataProc Image 1.1和Spark 2.0.0。要完成我的一个操作,我必须完成笛卡尔积。自版本2.0.0以来,创建了一个spark配置参数(spark.sql.cross Join.enabled),该参数禁止笛卡尔乘积,并引发异常。如何设置spark.sql.crossJoin.enabled=true,最好使用初始化操作? spark.sql.crossJoin.enabled=truespark>=3.0 spark.sql.crossJoin

我正在使用“预览”Google DataProc Image 1.1和Spark 2.0.0。要完成我的一个操作,我必须完成笛卡尔积。自版本2.0.0以来,创建了一个spark配置参数(spark.sql.cross Join.enabled),该参数禁止笛卡尔乘积,并引发异常。如何设置spark.sql.crossJoin.enabled=true,最好使用初始化操作?
spark.sql.crossJoin.enabled=true
spark>=3.0

spark.sql.crossJoin.enable默认为true()

火花>=2.1

您可以使用
交叉连接

df1.交叉连接(df2)
它使您的意图明确,并保持更保守的配置,以保护您免受意外交叉连接的影响

Spark 2.0

SQL属性可以在运行时使用
RuntimeConfig.set
方法动态设置,因此您应该能够调用

spark.conf.set(“spark.sql.crossJoin.enabled”,true)

当您希望显式允许笛卡尔乘积时。

要更改Dataproc中配置设置的默认值,甚至不需要初始化操作,您可以在从命令行创建集群时使用:

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

TPCDS查询集基准测试具有包含
交叉连接的查询,除非您显式写入
交叉连接
或动态地将Spark的默认属性设置为true
Spark.conf.set(“Spark.sql.crossJoin.enabled”,true)
,否则您将遇到异常错误

错误出现在TPCDS查询28、61、88和90上,因为来自事务处理委员会(TPC)的原始查询语法包含逗号,Spark的默认联接操作是内部联接。我的团队还决定使用交叉连接来代替更改Spark的默认属性。

我认为应该这样做

spark.conf.set("spark.sql.crossJoin.enabled", True)
否则它会给

NameError:未定义名称“true”


spark 2.1之前的
DataFrame
/
Dataset
上似乎没有
crossJoin()
。@RickHaffey对于spark 2.1之前的版本,使用
Dataset.join(rightDataset)
API和
spark.conf.set(“spark.sql.crossJoin.enabled”,true)
配置选项。这种风格也适用于Spark 2.1,但是.crossJoin API非常理想,因为它更显式。如果您使用的是iPython
true
应该是
true