Apache spark spark 2.x的spark.sql.crossJoin.enabled
我正在使用“预览”Google DataProc Image 1.1和Spark 2.0.0。要完成我的一个操作,我必须完成笛卡尔积。自版本2.0.0以来,创建了一个spark配置参数(spark.sql.cross Join.enabled),该参数禁止笛卡尔乘积,并引发异常。如何设置spark.sql.crossJoin.enabled=true,最好使用初始化操作?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
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的默认属性设置为trueSpark.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非常理想,因为它更显式。如果您使用的是iPythontrue
应该是true