Skip to content

Commit f00d309

Browse files
authored
Spark 3.4: Display more read metrics on Spark SQL UI (#9009)
This change cherry-picks PR #8717 to Spark 3.4.
1 parent af132c7 commit f00d309

26 files changed

+1017
-35
lines changed

spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/SparkScan.java

Lines changed: 72 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,39 @@
3535
import org.apache.iceberg.spark.Spark3Util;
3636
import org.apache.iceberg.spark.SparkReadConf;
3737
import org.apache.iceberg.spark.SparkSchemaUtil;
38+
import org.apache.iceberg.spark.source.metrics.EqualityDeleteFiles;
39+
import org.apache.iceberg.spark.source.metrics.IndexedDeleteFiles;
3840
import org.apache.iceberg.spark.source.metrics.NumDeletes;
3941
import org.apache.iceberg.spark.source.metrics.NumSplits;
40-
import org.apache.iceberg.spark.source.metrics.ScannedDataFiles;
42+
import org.apache.iceberg.spark.source.metrics.PositionalDeleteFiles;
43+
import org.apache.iceberg.spark.source.metrics.ResultDataFiles;
44+
import org.apache.iceberg.spark.source.metrics.ResultDeleteFiles;
4145
import org.apache.iceberg.spark.source.metrics.ScannedDataManifests;
46+
import org.apache.iceberg.spark.source.metrics.ScannedDeleteManifests;
4247
import org.apache.iceberg.spark.source.metrics.SkippedDataFiles;
4348
import org.apache.iceberg.spark.source.metrics.SkippedDataManifests;
44-
import org.apache.iceberg.spark.source.metrics.TaskScannedDataFiles;
49+
import org.apache.iceberg.spark.source.metrics.SkippedDeleteFiles;
50+
import org.apache.iceberg.spark.source.metrics.SkippedDeleteManifests;
51+
import org.apache.iceberg.spark.source.metrics.TaskEqualityDeleteFiles;
52+
import org.apache.iceberg.spark.source.metrics.TaskIndexedDeleteFiles;
53+
import org.apache.iceberg.spark.source.metrics.TaskPositionalDeleteFiles;
54+
import org.apache.iceberg.spark.source.metrics.TaskResultDataFiles;
55+
import org.apache.iceberg.spark.source.metrics.TaskResultDeleteFiles;
4556
import org.apache.iceberg.spark.source.metrics.TaskScannedDataManifests;
57+
import org.apache.iceberg.spark.source.metrics.TaskScannedDeleteManifests;
4658
import org.apache.iceberg.spark.source.metrics.TaskSkippedDataFiles;
4759
import org.apache.iceberg.spark.source.metrics.TaskSkippedDataManifests;
48-
import org.apache.iceberg.spark.source.metrics.TaskTotalFileSize;
60+
import org.apache.iceberg.spark.source.metrics.TaskSkippedDeleteFiles;
61+
import org.apache.iceberg.spark.source.metrics.TaskSkippedDeleteManifests;
62+
import org.apache.iceberg.spark.source.metrics.TaskTotalDataFileSize;
63+
import org.apache.iceberg.spark.source.metrics.TaskTotalDataManifests;
64+
import org.apache.iceberg.spark.source.metrics.TaskTotalDeleteFileSize;
65+
import org.apache.iceberg.spark.source.metrics.TaskTotalDeleteManifests;
4966
import org.apache.iceberg.spark.source.metrics.TaskTotalPlanningDuration;
50-
import org.apache.iceberg.spark.source.metrics.TotalFileSize;
67+
import org.apache.iceberg.spark.source.metrics.TotalDataFileSize;
68+
import org.apache.iceberg.spark.source.metrics.TotalDataManifests;
69+
import org.apache.iceberg.spark.source.metrics.TotalDeleteFileSize;
70+
import org.apache.iceberg.spark.source.metrics.TotalDeleteManifests;
5171
import org.apache.iceberg.spark.source.metrics.TotalPlanningDuration;
5272
import org.apache.iceberg.types.Types;
5373
import org.apache.iceberg.util.PropertyUtil;
@@ -200,27 +220,68 @@ public CustomTaskMetric[] reportDriverMetrics() {
200220
}
201221

202222
List<CustomTaskMetric> driverMetrics = Lists.newArrayList();
203-
driverMetrics.add(TaskTotalFileSize.from(scanReport));
223+
224+
// common
204225
driverMetrics.add(TaskTotalPlanningDuration.from(scanReport));
205-
driverMetrics.add(TaskSkippedDataFiles.from(scanReport));
206-
driverMetrics.add(TaskScannedDataFiles.from(scanReport));
207-
driverMetrics.add(TaskSkippedDataManifests.from(scanReport));
226+
227+
// data manifests
228+
driverMetrics.add(TaskTotalDataManifests.from(scanReport));
208229
driverMetrics.add(TaskScannedDataManifests.from(scanReport));
230+
driverMetrics.add(TaskSkippedDataManifests.from(scanReport));
231+
232+
// data files
233+
driverMetrics.add(TaskResultDataFiles.from(scanReport));
234+
driverMetrics.add(TaskSkippedDataFiles.from(scanReport));
235+
driverMetrics.add(TaskTotalDataFileSize.from(scanReport));
236+
237+
// delete manifests
238+
driverMetrics.add(TaskTotalDeleteManifests.from(scanReport));
239+
driverMetrics.add(TaskScannedDeleteManifests.from(scanReport));
240+
driverMetrics.add(TaskSkippedDeleteManifests.from(scanReport));
241+
242+
// delete files
243+
driverMetrics.add(TaskTotalDeleteFileSize.from(scanReport));
244+
driverMetrics.add(TaskResultDeleteFiles.from(scanReport));
245+
driverMetrics.add(TaskEqualityDeleteFiles.from(scanReport));
246+
driverMetrics.add(TaskIndexedDeleteFiles.from(scanReport));
247+
driverMetrics.add(TaskPositionalDeleteFiles.from(scanReport));
248+
driverMetrics.add(TaskSkippedDeleteFiles.from(scanReport));
209249

210250
return driverMetrics.toArray(new CustomTaskMetric[0]);
211251
}
212252

213253
@Override
214254
public CustomMetric[] supportedCustomMetrics() {
215255
return new CustomMetric[] {
256+
// task metrics
216257
new NumSplits(),
217258
new NumDeletes(),
218-
new TotalFileSize(),
259+
260+
// common
219261
new TotalPlanningDuration(),
262+
263+
// data manifests
264+
new TotalDataManifests(),
220265
new ScannedDataManifests(),
221266
new SkippedDataManifests(),
222-
new ScannedDataFiles(),
223-
new SkippedDataFiles()
267+
268+
// data files
269+
new ResultDataFiles(),
270+
new SkippedDataFiles(),
271+
new TotalDataFileSize(),
272+
273+
// delete manifests
274+
new TotalDeleteManifests(),
275+
new ScannedDeleteManifests(),
276+
new SkippedDeleteManifests(),
277+
278+
// delete files
279+
new TotalDeleteFileSize(),
280+
new ResultDeleteFiles(),
281+
new EqualityDeleteFiles(),
282+
new IndexedDeleteFiles(),
283+
new PositionalDeleteFiles(),
284+
new SkippedDeleteFiles()
224285
};
225286
}
226287

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.apache.iceberg.spark.source.metrics;
20+
21+
import org.apache.spark.sql.connector.metric.CustomSumMetric;
22+
23+
public class EqualityDeleteFiles extends CustomSumMetric {
24+
25+
static final String NAME = "equalityDeleteFiles";
26+
27+
@Override
28+
public String name() {
29+
return NAME;
30+
}
31+
32+
@Override
33+
public String description() {
34+
return "number of equality delete files";
35+
}
36+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.apache.iceberg.spark.source.metrics;
20+
21+
import org.apache.spark.sql.connector.metric.CustomSumMetric;
22+
23+
public class IndexedDeleteFiles extends CustomSumMetric {
24+
25+
static final String NAME = "indexedDeleteFiles";
26+
27+
@Override
28+
public String name() {
29+
return NAME;
30+
}
31+
32+
@Override
33+
public String description() {
34+
return "number of indexed delete files";
35+
}
36+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.apache.iceberg.spark.source.metrics;
20+
21+
import org.apache.spark.sql.connector.metric.CustomSumMetric;
22+
23+
public class PositionalDeleteFiles extends CustomSumMetric {
24+
25+
static final String NAME = "positionalDeleteFiles";
26+
27+
@Override
28+
public String name() {
29+
return NAME;
30+
}
31+
32+
@Override
33+
public String description() {
34+
return "number of positional delete files";
35+
}
36+
}

spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/ScannedDataFiles.java renamed to spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/ResultDataFiles.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020

2121
import org.apache.spark.sql.connector.metric.CustomSumMetric;
2222

23-
public class ScannedDataFiles extends CustomSumMetric {
23+
public class ResultDataFiles extends CustomSumMetric {
2424

25-
static final String NAME = "scannedDataFiles";
25+
static final String NAME = "resultDataFiles";
2626

2727
@Override
2828
public String name() {
@@ -31,6 +31,6 @@ public String name() {
3131

3232
@Override
3333
public String description() {
34-
return "number of scanned data files";
34+
return "number of result data files";
3535
}
3636
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.apache.iceberg.spark.source.metrics;
20+
21+
import org.apache.spark.sql.connector.metric.CustomSumMetric;
22+
23+
public class ResultDeleteFiles extends CustomSumMetric {
24+
25+
static final String NAME = "resultDeleteFiles";
26+
27+
@Override
28+
public String name() {
29+
return NAME;
30+
}
31+
32+
@Override
33+
public String description() {
34+
return "number of result delete files";
35+
}
36+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.apache.iceberg.spark.source.metrics;
20+
21+
import org.apache.spark.sql.connector.metric.CustomSumMetric;
22+
23+
public class ScannedDeleteManifests extends CustomSumMetric {
24+
25+
static final String NAME = "scannedDeleteManifests";
26+
27+
@Override
28+
public String name() {
29+
return NAME;
30+
}
31+
32+
@Override
33+
public String description() {
34+
return "number of scanned delete manifests";
35+
}
36+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.apache.iceberg.spark.source.metrics;
20+
21+
import org.apache.spark.sql.connector.metric.CustomSumMetric;
22+
23+
public class SkippedDeleteFiles extends CustomSumMetric {
24+
25+
static final String NAME = "skippedDeleteFiles";
26+
27+
@Override
28+
public String name() {
29+
return NAME;
30+
}
31+
32+
@Override
33+
public String description() {
34+
return "number of skipped delete files";
35+
}
36+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.apache.iceberg.spark.source.metrics;
20+
21+
import org.apache.spark.sql.connector.metric.CustomSumMetric;
22+
23+
public class SkippedDeleteManifests extends CustomSumMetric {
24+
25+
static final String NAME = "skippedDeleteManifests";
26+
27+
@Override
28+
public String name() {
29+
return NAME;
30+
}
31+
32+
@Override
33+
public String description() {
34+
return "number of skipped delete manifest";
35+
}
36+
}

0 commit comments

Comments
 (0)