You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@spark.apache.org by "yucai (JIRA)" <ji...@apache.org> on 2015/12/11 16:44:10 UTC
[jira] [Commented] (SPARK-12275) No plan for BroadcastHint in some
condition
[ https://issues.apache.org/jira/browse/SPARK-12275?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15052916#comment-15052916 ]
yucai commented on SPARK-12275:
-------------------------------
*Root Cause*
When BasicOperators's "case BroadcastHint(child)" is hit (in SparkStrategies.scala), it will recursively invoke BasicOperators.apply by using "child":
{code}
case BroadcastHint(child) => apply(child)
{code}
If BasicOperators could not process that child properly, it will lead to "No plan for BroadcastHint".
{code}
case _ => Nil
{code}
In my example above, broadcast(pf1) hits "case BroadcastHint(child)", so the child is pf1, its type is "Relation[key#91,value#92] ParquetRelation".
And then using this child to invoke BasicOperators.apply again, unfortunately, this child type "Relation[key#91,value#92] ParquetRelation" could not match anything in BasicOperators.apply, so return Nil, "No plan for BroadcastHint".
*Solution*
Using planLater to invoke other execution strategies that are available
> No plan for BroadcastHint in some condition
> -------------------------------------------
>
> Key: SPARK-12275
> URL: https://issues.apache.org/jira/browse/SPARK-12275
> Project: Spark
> Issue Type: Bug
> Components: SQL
> Affects Versions: 1.6.0
> Reporter: yucai
>
> *Summary*
> No plan for BroadcastHint is generated in some condition.
> *Test Case*
> {code}
> val df1 = Seq((1, "1"), (2, "2")).toDF("key", "value")
> val parquetTempFile =
> "%s/SPARK-xxxx_%d.parquet".format(System.getProperty("java.io.tmpdir"), scala.util.Random.nextInt)
> df1.write.parquet(parquetTempFile)
> val pf1 = sqlContext.read.parquet(parquetTempFile)
> df1.join(broadcast(pf1)).count()
> {code}
> *Result*
> It will trigger assertion in QueryPlanner.scala, like below:
> {code}
> scala> df1.join(broadcast(pf1)).count()
> java.lang.AssertionError: assertion failed: No plan for BroadcastHint
> +- Relation[key#6,value#7] ParquetRelation[hdfs://10.1.0.20:8020/tmp/SPARK-xxxx_1817830406.parquet]
> at scala.Predef$.assert(Predef.scala:179)
> at org.apache.spark.sql.catalyst.planning.QueryPlanner.plan(QueryPlanner.scala:59)
> at org.apache.spark.sql.catalyst.planning.QueryPlanner.planLater(QueryPlanner.scala:54)
> at org.apache.spark.sql.execution.SparkStrategies$BasicOperators$.apply(SparkStrategies.scala:336)
> at org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$1.apply(QueryPlanner.scala:58)
> at org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$1.apply(QueryPlanner.scala:58)
> at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371)
> at org.apache.spark.sql.catalyst.planning.QueryPlanner.plan(QueryPlanner.scala:59)
> at org.apache.spark.sql.catalyst.planning.QueryPlanner.planLater(QueryPlanner.scala:54)
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@spark.apache.org
For additional commands, e-mail: issues-help@spark.apache.org