Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 解释运算符中的数字前缀是什么意思?_Apache Spark_Apache Spark Sql - Fatal编程技术网

Apache spark 解释运算符中的数字前缀是什么意思?

Apache spark 解释运算符中的数字前缀是什么意思?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,(1)、(6)和(3)在下面的解释输出中是什么意思。Spark版本是2.3.1 我想大概是在Spark 2.0左右,Spark SQL开始为结构化查询的某些部分生成Java代码。该特性称为整个阶段Java代码生成(也称为整个阶段代码生成) 全阶段Java代码生成(也称为全阶段代码生成)只是Spark SQL中的一种物理查询优化,它将多个物理运算符(作为支持代码生成的计划的子树)融合到一个Java函数中 您可以使用explain操作符了解Java生成的结构化查询的代码部分 val q = spar

(1)
(6)
(3)
在下面的
解释输出中是什么意思。Spark版本是2.3.1


我想大概是在Spark 2.0左右,Spark SQL开始为结构化查询的某些部分生成Java代码。该特性称为整个阶段Java代码生成(也称为整个阶段代码生成)

全阶段Java代码生成(也称为全阶段代码生成)只是Spark SQL中的一种物理查询优化,它将多个物理运算符(作为支持代码生成的计划的子树)融合到一个Java函数中

您可以使用
explain
操作符了解Java生成的结构化查询的代码部分

val q = spark.range(5)
  .groupBy('id % 2 as "g")
  .agg(collect_list('id) as "ids")
  .join(spark.range(5))
  .where('id === 'g)
scala> q.explain
== Physical Plan ==
*(3) BroadcastHashJoin [g#1266L], [id#1272L], Inner, BuildRight
:- *(3) Filter isnotnull(g#1266L)
:  +- ObjectHashAggregate(keys=[(id#1264L % 2)#1278L], functions=[collect_list(id#1264L, 0, 0)])
:     +- Exchange hashpartitioning((id#1264L % 2)#1278L, 200)
:        +- ObjectHashAggregate(keys=[(id#1264L % 2) AS (id#1264L % 2)#1278L], functions=[partial_collect_list(id#1264L, 0, 0)])
:           +- *(1) Range (0, 5, step=1, splits=8)
+- BroadcastExchange HashedRelationBroadcastMode(List(input[0, bigint, false]))
   +- *(2) Range (0, 5, step=1, splits=8)
正如您所注意到的,我有一个带3个星号的圆括号数字的查询。这些装饰(星号和数字)都是整个java代码生成优化阶段的一部分

这些数字表示sparksql为其生成单独的函数的完整的tagecodegen子树,这些函数一起是sparksql用于执行查询的底层代码

您可以使用
debug
隐式界面查看代码和子树

scala> q.queryExecution.debug.codegen
Found 3 WholeStageCodegen subtrees.
== Subtree 1 / 3 ==
*(1) Range (0, 5, step=1, splits=8)

Generated code:
...

我想大概是在Spark 2.0左右,Spark SQL开始为结构化查询的某些部分生成Java代码。该特性称为整个阶段Java代码生成(也称为整个阶段代码生成)

全阶段Java代码生成(也称为全阶段代码生成)只是Spark SQL中的一种物理查询优化,它将多个物理运算符(作为支持代码生成的计划的子树)融合到一个Java函数中

您可以使用
explain
操作符了解Java生成的结构化查询的代码部分

val q = spark.range(5)
  .groupBy('id % 2 as "g")
  .agg(collect_list('id) as "ids")
  .join(spark.range(5))
  .where('id === 'g)
scala> q.explain
== Physical Plan ==
*(3) BroadcastHashJoin [g#1266L], [id#1272L], Inner, BuildRight
:- *(3) Filter isnotnull(g#1266L)
:  +- ObjectHashAggregate(keys=[(id#1264L % 2)#1278L], functions=[collect_list(id#1264L, 0, 0)])
:     +- Exchange hashpartitioning((id#1264L % 2)#1278L, 200)
:        +- ObjectHashAggregate(keys=[(id#1264L % 2) AS (id#1264L % 2)#1278L], functions=[partial_collect_list(id#1264L, 0, 0)])
:           +- *(1) Range (0, 5, step=1, splits=8)
+- BroadcastExchange HashedRelationBroadcastMode(List(input[0, bigint, false]))
   +- *(2) Range (0, 5, step=1, splits=8)
正如您所注意到的,我有一个带3个星号的圆括号数字的查询。这些装饰(星号和数字)都是整个java代码生成优化阶段的一部分

这些数字表示sparksql为其生成单独的函数的完整的tagecodegen子树,这些函数一起是sparksql用于执行查询的底层代码

您可以使用
debug
隐式界面查看代码和子树

scala> q.queryExecution.debug.codegen
Found 3 WholeStageCodegen subtrees.
== Subtree 1 / 3 ==
*(1) Range (0, 5, step=1, splits=8)

Generated code:
...

奇怪的是,我对合成数据帧运行了几次
explain
,但没有看到这些数字。你能分享一下代码片段吗?这样我就可以在我的环境中重现这个代码了?@morsik这些数字是在Spark 2.2周围加上去的。你的Spark版本是什么?我使用2.2.0,这很奇怪,我对合成数据帧运行了几次
explain
,但没有看到这些数字。你能分享一下代码片段吗?这样我就可以在我的环境中重现这个代码了?@morsik这些数字是在Spark 2.2周围加上去的。你的Spark版本是什么?我用的是2.2.0too@thebluephantom当然你不是。最终,对于大多数结构化查询,您将得到RDD和任务。谢谢@JacekLaskowski@thebluephantom当然你不是。最终,对于大多数结构化查询,您将得到RDD和任务。谢谢@JacekLaskowski