删除表,仍然导致交换

时间:2019-04-24 08:18:48

标签: apache-spark apache-spark-sql bucket

我在连接两个表时使用了Bucketing,但是交换仍在进行。我不确定自己在做什么错。

我经历过-https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark-sql-bucketing.html和其他各种有关存储的博客。

我已验证以下内容-

  1. 联接两侧的分区数必须完全相同。

bucketedTable1.queryExecution.toRdd.getNumPartitions bucketedTable1.queryExecution.toRdd.getNumPartitions

以上两个查询均得出1000。

  1. HashPartitioning分区方案正在使用。

  2. 我正在基于用于存储分区的相同键来联接表。

  3. 我已确认启用了存储桶

spark.sessionState.conf.bucketingEnabled结果为true。

val table1 = sql("select * from table1")

val table2 = sql("select * from table2")

table1.write.bucketBy(1000, "col1", "col2", "col3", "col4").mode(SaveMode.Overwrite).saveAsTable("table1BucketedTableName")

table2.write.bucketBy(1000, "col5", "col6", "col3", "col4").mode(SaveMode.Overwrite).saveAsTable("table2BucketedTableName")

val bucketedTable1 = spark.table("table1BucketedTableName")
val bucketedTable2 = spark.table("table2BucketedTableName")


val joinedTable = bucketedTable1.join(bucketedTable2, bucketedTable1("col1") === bucketedTable2("col5") && bucketedTable1("col2") === bucketedTable2("col6") && bucketedTable1("col3") === bucketedTable2("col3") && bucketedTable1("col4") === bucketedTable2("col4"))

joinedTable.show(false)

预期输出是不应该进行交换。

但是当我检查Spark UI时,可以看到交换的发生。

0 个答案:

没有答案