|
17 | 17 |
|
18 | 18 | package org.apache.spark.sql.hive.execution
|
19 | 19 |
|
| 20 | +import org.scalatest.Matchers._ |
| 21 | + |
20 | 22 | import org.apache.spark.sql.QueryTest
|
21 | 23 | import org.apache.spark.sql.catalyst.dsl.expressions._
|
22 | 24 | import org.apache.spark.sql.catalyst.dsl.plans._
|
23 |
| -import org.apache.spark.sql.catalyst.plans.logical.{Filter, LogicalPlan, Project} |
| 25 | +import org.apache.spark.sql.catalyst.plans.logical.{Filter, LogicalPlan, Project, ResolvedHint} |
24 | 26 | import org.apache.spark.sql.catalyst.rules.RuleExecutor
|
25 | 27 | import org.apache.spark.sql.execution.datasources.{CatalogFileIndex, HadoopFsRelation, LogicalRelation, PruneFileSourcePartitions}
|
26 | 28 | import org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat
|
| 29 | +import org.apache.spark.sql.execution.joins.BroadcastHashJoinExec |
| 30 | +import org.apache.spark.sql.functions.broadcast |
27 | 31 | import org.apache.spark.sql.hive.test.TestHiveSingleton
|
| 32 | +import org.apache.spark.sql.internal.SQLConf |
28 | 33 | import org.apache.spark.sql.test.SQLTestUtils
|
29 | 34 | import org.apache.spark.sql.types.StructType
|
30 | 35 |
|
@@ -66,4 +71,16 @@ class PruneFileSourcePartitionsSuite extends QueryTest with SQLTestUtils with Te
|
66 | 71 | }
|
67 | 72 | }
|
68 | 73 | }
|
| 74 | + |
| 75 | + test("SPARK-26576 Broadcast hint not applied to partitioned table") { |
| 76 | + withTable("tbl") { |
| 77 | + withSQLConf(SQLConf.AUTO_BROADCASTJOIN_THRESHOLD.key -> "-1") { |
| 78 | + spark.range(10).selectExpr("id", "id % 3 as p").write.partitionBy("p").saveAsTable("tbl") |
| 79 | + val df = spark.table("tbl") |
| 80 | + val qe = df.join(broadcast(df), "p").queryExecution |
| 81 | + qe.optimizedPlan.collect { case _: ResolvedHint => } should have size 1 |
| 82 | + qe.sparkPlan.collect { case j: BroadcastHashJoinExec => j } should have size 1 |
| 83 | + } |
| 84 | + } |
| 85 | + } |
69 | 86 | }
|
0 commit comments