digraph G {
0 [labelType="html" label="<br><b>AdaptiveSparkPlan</b><br><br>"];
subgraph cluster1 {
isCluster="true";
label="WholeStageCodegen (2)\n \nduration: 0 ms";
2 [labelType="html" label="<b>HashAggregate</b><br><br>time in aggregation build: 0 ms<br>number of output rows: 1"];
}
3 [labelType="html" label="<b>Exchange</b><br><br>shuffle records written: 2<br>local merged chunks fetched: 0<br>shuffle write time total (min, med, max (stageId: taskId))<br>6 ms (0 ms, 0 ms, 5 ms (stage 12.0: task 13))<br>remote merged bytes read: 0.0 B<br>local merged blocks fetched: 0<br>corrupt merged block chunks: 0<br>remote merged reqs duration: 0 ms<br>remote merged blocks fetched: 0<br>records read: 2<br>local bytes read: 126.0 B<br>fetch wait time: 0 ms<br>remote bytes read: 0.0 B<br>merged fetch fallback count: 0<br>local blocks read: 2<br>remote merged chunks fetched: 0<br>remote blocks read: 0<br>data size total (min, med, max (stageId: taskId))<br>48.0 B (0.0 B, 24.0 B, 24.0 B (stage 12.0: task 13))<br>local merged bytes read: 0.0 B<br>number of partitions: 1<br>remote reqs duration: 0 ms<br>remote bytes read to disk: 0.0 B<br>shuffle bytes written total (min, med, max (stageId: taskId))<br>126.0 B (0.0 B, 57.0 B, 69.0 B (stage 12.0: task 12))"];
subgraph cluster4 {
isCluster="true";
label="WholeStageCodegen (1)\n \nduration: total (min, med, max (stageId: taskId))\n480 ms (234 ms, 246 ms, 246 ms (stage 12.0: task 12))";
5 [labelType="html" label="<b>HashAggregate</b><br><br>time in aggregation build total (min, med, max (stageId: taskId))<br>473 ms (227 ms, 246 ms, 246 ms (stage 12.0: task 12))<br>number of output rows: 2"];
6 [labelType="html" label="<br><b>Project</b><br><br>"];
7 [labelType="html" label="<b>Filter</b><br><br>number of output rows: 1"];
8 [labelType="html" label="<b>ColumnarToRow</b><br><br>number of output rows: 26,236<br>number of input batches: 8"];
}
9 [labelType="html" label="<b>Scan parquet spark_catalog.default.airports</b><br><br>number of files read: 2<br>scan time total (min, med, max (stageId: taskId))<br>453 ms (219 ms, 234 ms, 234 ms (stage 12.0: task 12))<br>metadata time: 0 ms<br>size of files read: 2.1 MiB<br>number of output rows: 26,236"];
2->0;
3->2;
5->3;
6->5;
7->6;
8->7;
9->8;
}
10
AdaptiveSparkPlan isFinalPlan=true
HashAggregate(keys=[], functions=[sum(elev#156), sum(lat#154)])
WholeStageCodegen (2)
Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=246]
HashAggregate(keys=[], functions=[partial_sum(elev#156), partial_sum(lat#154)])
Project [lat#154, elev#156]
Filter (isnotnull(code#162) AND (code#162 = 0GA2))
ColumnarToRow
WholeStageCodegen (1)
FileScan parquet spark_catalog.default.airports[lat#154,elev#156,code#162] Batched: true, DataFilters: [isnotnull(code#162), (code#162 = 0GA2)], Format: Parquet, Location: InMemoryFileIndex(1 paths)[file:/home/acdcadmin/spark-warehouse/airports], PartitionFilters: [], PushedFilters: [IsNotNull(code), EqualTo(code,0GA2)], ReadSchema: struct<lat:double,elev:double,code:string>
== Physical Plan ==
AdaptiveSparkPlan (14)
+- == Final Plan ==
* HashAggregate (8)
+- ShuffleQueryStage (7), Statistics(sizeInBytes=48.0 B, rowCount=2)
+- Exchange (6)
+- * HashAggregate (5)
+- * Project (4)
+- * Filter (3)
+- * ColumnarToRow (2)
+- Scan parquet spark_catalog.default.airports (1)
+- == Initial Plan ==
HashAggregate (13)
+- Exchange (12)
+- HashAggregate (11)
+- Project (10)
+- Filter (9)
+- Scan parquet spark_catalog.default.airports (1)
(1) Scan parquet spark_catalog.default.airports
Output [3]: [lat#154, elev#156, code#162]
Batched: true
Location: InMemoryFileIndex [file:/home/acdcadmin/spark-warehouse/airports]
PushedFilters: [IsNotNull(code), EqualTo(code,0GA2)]
ReadSchema: struct<lat:double,elev:double,code:string>
(2) ColumnarToRow [codegen id : 1]
Input [3]: [lat#154, elev#156, code#162]
(3) Filter [codegen id : 1]
Input [3]: [lat#154, elev#156, code#162]
Condition : (isnotnull(code#162) AND (code#162 = 0GA2))
(4) Project [codegen id : 1]
Output [2]: [lat#154, elev#156]
Input [3]: [lat#154, elev#156, code#162]
(5) HashAggregate [codegen id : 1]
Input [2]: [lat#154, elev#156]
Keys: []
Functions [2]: [partial_sum(elev#156), partial_sum(lat#154)]
Aggregate Attributes [2]: [sum#169, sum#170]
Results [2]: [sum#171, sum#172]
(6) Exchange
Input [2]: [sum#171, sum#172]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=246]
(7) ShuffleQueryStage
Output [2]: [sum#171, sum#172]
Arguments: 0
(8) HashAggregate [codegen id : 2]
Input [2]: [sum#171, sum#172]
Keys: []
Functions [2]: [sum(elev#156), sum(lat#154)]
Aggregate Attributes [2]: [sum(elev#156)#164, sum(lat#154)#165]
Results [2]: [sum(elev#156)#164 AS C1#149, sum(lat#154)#165 AS C2#150]
(9) Filter
Input [3]: [lat#154, elev#156, code#162]
Condition : (isnotnull(code#162) AND (code#162 = 0GA2))
(10) Project
Output [2]: [lat#154, elev#156]
Input [3]: [lat#154, elev#156, code#162]
(11) HashAggregate
Input [2]: [lat#154, elev#156]
Keys: []
Functions [2]: [partial_sum(elev#156), partial_sum(lat#154)]
Aggregate Attributes [2]: [sum#169, sum#170]
Results [2]: [sum#171, sum#172]
(12) Exchange
Input [2]: [sum#171, sum#172]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=225]
(13) HashAggregate
Input [2]: [sum#171, sum#172]
Keys: []
Functions [2]: [sum(elev#156), sum(lat#154)]
Aggregate Attributes [2]: [sum(elev#156)#164, sum(lat#154)#165]
Results [2]: [sum(elev#156)#164 AS C1#149, sum(lat#154)#165 AS C2#150]
(14) AdaptiveSparkPlan
Output [2]: [C1#149, C2#150]
Arguments: isFinalPlan=true