Files that are both large and changed often are where bugs tend to cluster and where refactoring pays off first. Each file in the current tree is placed by its size and by the number of commits that changed it; its hotspot score is changes × √lines. Files without counted lines, such as binary files, are left out.
Each dot is a file; a bigger dot is a higher score. The dashed lines mark the median file size and the median number of changes, so the large files that change often are in the top right. Both axes are logarithmic. Showing the 2,000 highest-scoring of 6,484 files.
The files ranked by hotspot score: the larger a file is and the more often it changes, the higher it ranks. Authors is how many people have changed the file, bots aside, as on the Code Ownership page: a hotspot only one person has changed is also a bus-factor risk.
| File | Lines | Changes | Authors | Score | |
|---|---|---|---|---|---|
| build.gradle | 1,315 | 447 | 110 | 16,209.5 | |
| open-api/rest-catalog-open-api.yaml | 6,415 | 146 | 45 | 11,693.7 | |
| gradle/libs.versions.toml | 234 | 762 | 51 | 11,656.4 | |
| format/spec.md | 2,378 | 130 | 53 | 6,339.4 | |
| core/src/test/java/org/apache/iceberg/rest/TestRESTCatalog.java | 4,135 | 98 | 34 | 6,301.8 | |
| core/src/main/java/org/apache/iceberg/rest/RESTSessionCatalog.java | 1,982 | 116 | 34 | 5,164.3 | |
| core/src/main/java/org/apache/iceberg/TableMetadata.java | 1,927 | 107 | 42 | 4,697.0 | |
| .palantir/revapi.yml | 2,255 | 94 | 29 | 4,463.8 | |
| open-api/rest-catalog-open-api.py | 2,560 | 78 | 33 | 3,946.5 | |
| core/src/test/java/org/apache/iceberg/catalog/CatalogTests.java | 3,672 | 65 | 27 | 3,938.8 |
| File | Lines | Changes | Authors | Score | |
|---|---|---|---|---|---|
| build.gradle | 1,315 | 447 | 110 | 16,209.5 | |
| open-api/rest-catalog-open-api.yaml | 6,415 | 146 | 45 | 11,693.7 | |
| gradle/libs.versions.toml | 234 | 762 | 51 | 11,656.4 | |
| format/spec.md | 2,378 | 130 | 53 | 6,339.4 | |
| core/src/test/java/org/apache/iceberg/rest/TestRESTCatalog.java | 4,135 | 98 | 34 | 6,301.8 | |
| core/src/main/java/org/apache/iceberg/rest/RESTSessionCatalog.java | 1,982 | 116 | 34 | 5,164.3 | |
| core/src/main/java/org/apache/iceberg/TableMetadata.java | 1,927 | 107 | 42 | 4,697.0 | |
| .palantir/revapi.yml | 2,255 | 94 | 29 | 4,463.8 | |
| open-api/rest-catalog-open-api.py | 2,560 | 78 | 33 | 3,946.5 | |
| core/src/test/java/org/apache/iceberg/catalog/CatalogTests.java | 3,672 | 65 | 27 | 3,938.8 | |
| core/src/test/java/org/apache/iceberg/TestTableMetadata.java | 2,301 | 73 | 34 | 3,501.7 | |
| core/src/main/java/org/apache/iceberg/MergingSnapshotProducer.java | 1,364 | 84 | 29 | 3,102.3 | |
| parquet/src/main/java/org/apache/iceberg/parquet/Parquet.java | 1,737 | 69 | 39 | 2,875.7 | |
| core/src/main/java/org/apache/iceberg/SnapshotProducer.java | 945 | 88 | 31 | 2,705.2 | |
| site/docs/releases.md | 1,923 | 59 | 30 | 2,587.3 | |
| core/src/test/java/org/apache/iceberg/TestRemoveSnapshots.java | 2,374 | 52 | 28 | 2,533.6 | |
| core/src/main/java/org/apache/iceberg/TableProperties.java | 465 | 109 | 44 | 2,350.5 | |
| core/src/test/java/org/apache/iceberg/TestMetadataTableScans.java | 2,060 | 47 | 24 | 2,133.2 | |
| core/src/test/java/org/apache/iceberg/TestRowDelta.java | 2,718 | 40 | 19 | 2,085.4 | |
| spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/actions/TestRewriteDataFilesAction.java | 2,830 | 39 | 24 | 2,074.7 | |
| hive-metastore/src/test/java/org/apache/iceberg/hive/TestHiveCatalog.java | 1,404 | 48 | 30 | 1,798.6 | |
| core/src/test/java/org/apache/iceberg/jdbc/TestJdbcCatalog.java | 1,341 | 49 | 28 | 1,794.4 | |
| hive-metastore/src/main/java/org/apache/iceberg/hive/HiveCatalog.java | 987 | 56 | 37 | 1,759.3 | |
| core/src/main/java/org/apache/iceberg/BaseTransaction.java | 765 | 62 | 24 | 1,714.8 | |
| core/src/test/java/org/apache/iceberg/TestMergeAppend.java | 1,632 | 41 | 19 | 1,656.3 | |
| hive-metastore/src/main/java/org/apache/iceberg/hive/HiveTableOperations.java | 602 | 67 | 37 | 1,643.9 | |
| core/src/test/java/org/apache/iceberg/rest/RESTCatalogAdapter.java | 762 | 58 | 18 | 1,601.1 | |
| core/src/main/java/org/apache/iceberg/TableMetadataParser.java | 636 | 63 | 32 | 1,588.8 | |
| spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/actions/TestRewriteDataFilesAction.java | 2,898 | 29 | 19 | 1,561.2 | |
| docs/docs/spark-procedures.md | 1,126 | 44 | 28 | 1,476.5 | |
| aws/src/main/java/org/apache/iceberg/aws/AwsProperties.java | 607 | 59 | 27 | 1,453.6 | |
| .github/workflows/java-ci.yml | 169 | 110 | 26 | 1,430.0 | |
| spark/v3.5/spark-extensions/src/test/java/org/apache/iceberg/spark/extensions/TestViews.java | 2,220 | 30 | 7 | 1,413.5 | |
| settings.gradle | 209 | 95 | 38 | 1,373.4 | |
| api/src/main/java/org/apache/iceberg/types/TypeUtil.java | 973 | 44 | 21 | 1,372.5 | |
| arrow/src/main/java/org/apache/iceberg/arrow/vectorized/VectorizedArrowReader.java | 1,096 | 41 | 23 | 1,357.3 | |
| core/src/main/java/org/apache/iceberg/rest/CatalogHandlers.java | 1,062 | 41 | 22 | 1,336.1 | |
| core/src/test/java/org/apache/iceberg/TestRewriteManifests.java | 1,729 | 32 | 14 | 1,330.6 | |
| core/src/test/java/org/apache/iceberg/TestSchemaUpdate.java | 2,593 | 26 | 17 | 1,324.0 | |
| .baseline/checkstyle/checkstyle.xml | 571 | 54 | 24 | 1,290.4 | |
| api/src/main/java/org/apache/iceberg/PartitionSpec.java | 696 | 48 | 23 | 1,266.3 | |
| aws/src/main/java/org/apache/iceberg/aws/s3/S3FileIO.java | 638 | 50 | 20 | 1,262.9 | |
| core/src/main/java/org/apache/iceberg/ManifestReader.java | 475 | 56 | 18 | 1,220.5 | |
| .github/workflows/spark-ci.yml | 132 | 104 | 22 | 1,194.9 | |
| core/src/main/java/org/apache/iceberg/DeleteFileIndex.java | 975 | 38 | 13 | 1,186.5 | |
| core/src/main/java/org/apache/iceberg/jdbc/JdbcCatalog.java | 974 | 38 | 27 | 1,185.9 | |
| api/src/test/java/org/apache/iceberg/TestHelpers.java | 796 | 42 | 23 | 1,185.0 | |
| site/mkdocs.yml | 148 | 97 | 38 | 1,180.1 | |
| data/src/test/java/org/apache/iceberg/data/TestMetricsRowGroupFilter.java | 1,422 | 31 | 21 | 1,169.0 | |
| core/src/test/java/org/apache/iceberg/TestMetadataUpdateParser.java | 1,395 | 31 | 17 | 1,157.8 | |
| core/src/main/java/org/apache/iceberg/rest/HTTPClient.java | 641 | 45 | 17 | 1,139.3 | |
| orc/src/main/java/org/apache/iceberg/orc/ORC.java | 832 | 39 | 26 | 1,124.9 | |
| api/src/main/java/org/apache/iceberg/types/Types.java | 1,378 | 30 | 18 | 1,113.6 | |
| core/src/test/java/org/apache/iceberg/TestTransaction.java | 1,137 | 33 | 16 | 1,112.7 | |
| spark/v4.1/spark/src/test/java/org/apache/iceberg/spark/actions/TestRewriteDataFilesAction.java | 3,027 | 20 | 16 | 1,100.4 | |
| core/src/test/java/org/apache/iceberg/TestMetrics.java | 852 | 37 | 16 | 1,080.0 | |
| core/src/main/java/org/apache/iceberg/avro/Avro.java | 748 | 39 | 19 | 1,066.6 | |
| core/src/test/java/org/apache/iceberg/view/ViewCatalogTests.java | 2,142 | 23 | 7 | 1,064.5 | |
| flink/v1.20/flink/src/test/java/org/apache/iceberg/flink/sink/dynamic/TestDynamicIcebergSink.java | 2,051 | 23 | 13 | 1,041.6 | |
| .github/workflows/flink-ci.yml | 111 | 96 | 25 | 1,011.4 | |
| core/src/main/java/org/apache/iceberg/rest/auth/OAuth2Util.java | 740 | 37 | 16 | 1,006.5 | |
| parquet/src/main/java/org/apache/iceberg/parquet/ParquetValueReaders.java | 1,368 | 27 | 17 | 998.6 | |
| core/src/main/java/org/apache/iceberg/BaseFile.java | 681 | 38 | 17 | 991.6 | |
| core/src/main/java/org/apache/iceberg/CatalogUtil.java | 608 | 40 | 26 | 986.3 | |
| parquet/src/test/java/org/apache/iceberg/parquet/TestDictionaryRowGroupFilter.java | 1,379 | 26 | 23 | 965.5 | |
| docs/docs/aws.md | 819 | 33 | 28 | 944.4 | |
| spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/actions/TestRewriteTablePathsAction.java | 1,992 | 21 | 16 | 937.3 | |
| core/src/main/java/org/apache/iceberg/RemoveSnapshots.java | 475 | 43 | 24 | 937.2 | |
| core/src/test/java/org/apache/iceberg/rest/TestHTTPClient.java | 803 | 33 | 18 | 935.1 | |
| core/src/main/java/org/apache/iceberg/avro/ValueReaders.java | 1,352 | 25 | 12 | 919.2 | |
| core/src/main/java/org/apache/iceberg/ManifestGroup.java | 466 | 42 | 13 | 906.7 | |
| core/src/test/java/org/apache/iceberg/TestRewriteFiles.java | 1,126 | 27 | 16 | 906.0 | |
| aws/src/main/java/org/apache/iceberg/aws/glue/GlueCatalog.java | 666 | 35 | 25 | 903.2 | |
| core/src/main/java/org/apache/iceberg/ManifestFiles.java | 611 | 36 | 15 | 889.9 | |
| core/src/main/java/org/apache/iceberg/SchemaUpdate.java | 879 | 30 | 18 | 889.4 | |
| core/src/main/java/org/apache/iceberg/ManifestWriter.java | 576 | 37 | 12 | 888.0 | |
| nessie/src/test/java/org/apache/iceberg/nessie/TestNessieTable.java | 694 | 33 | 13 | 869.3 | |
| core/src/test/java/org/apache/iceberg/TestBase.java | 962 | 28 | 15 | 868.5 | |
| core/src/test/java/org/apache/iceberg/hadoop/TestHadoopCatalog.java | 681 | 33 | 23 | 861.2 | |
| core/src/main/java/org/apache/iceberg/BaseMetastoreTableOperations.java | 379 | 44 | 32 | 856.6 | |
| nessie/src/main/java/org/apache/iceberg/nessie/NessieCatalog.java | 430 | 41 | 11 | 850.2 | |
| spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/source/TestIcebergSourceTablesBase.java | 2,478 | 17 | 15 | 846.3 | |
| parquet/src/test/java/org/apache/iceberg/parquet/TestParquet.java | 1,051 | 26 | 23 | 842.9 | |
| core/src/main/java/org/apache/iceberg/BaseMetastoreCatalog.java | 308 | 48 | 23 | 842.4 | |
| spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/actions/TestRewritePositionDeleteFilesAction.java | 1,335 | 23 | 15 | 840.4 | |
| aws/src/integration/java/org/apache/iceberg/aws/glue/TestGlueCatalogTable.java | 784 | 30 | 23 | 840.0 | |
| spark/v3.5/spark-extensions/src/test/java/org/apache/iceberg/spark/extensions/TestRewriteDataFilesProcedure.java | 1,316 | 23 | 19 | 834.4 | |
| aws/src/main/java/org/apache/iceberg/aws/s3/S3FileIOProperties.java | 1,200 | 24 | 17 | 831.4 | |
| core/src/main/java/org/apache/iceberg/MetadataUpdateParser.java | 670 | 32 | 15 | 828.3 | |
| core/src/main/java/org/apache/iceberg/PartitionsTable.java | 368 | 43 | 21 | 824.9 | |
| spark/v3.5/spark-extensions/src/test/java/org/apache/iceberg/spark/extensions/TestMerge.java | 3,023 | 15 | 8 | 824.7 | |
| .github/workflows/hive-ci.yml | 108 | 78 | 18 | 810.6 | |
| spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/actions/TestRewriteTablePathsAction.java | 1,992 | 18 | 13 | 803.4 | |
| core/src/main/java/org/apache/iceberg/RewriteTablePathUtil.java | 885 | 27 | 20 | 803.2 | |
| api/src/main/java/org/apache/iceberg/Schema.java | 667 | 31 | 22 | 800.6 | |
| core/src/main/java/org/apache/iceberg/AllManifestsTable.java | 461 | 37 | 19 | 794.4 | |
| api/src/test/java/org/apache/iceberg/types/TestTypeUtil.java | 1,170 | 23 | 16 | 786.7 | |
| flink/v1.20/flink/src/main/java/org/apache/iceberg/flink/sink/IcebergSink.java | 1,162 | 23 | 8 | 784.0 | |
| core/src/main/java/org/apache/iceberg/BaseTable.java | 316 | 44 | 22 | 782.2 | |
| core/src/test/java/org/apache/iceberg/TestFastAppend.java | 669 | 30 | 15 | 776.0 |
How Apache Iceberg compares with other Apache projects →
How Apache Iceberg ranks among Apache projects by AI-assisted commits →
Generate this report for your own repository with gitstats-action · All Gallery reports
Publishes the report to GitHub Pages on every push to main: turn on Pages for the gh-pages branch.
# .github/workflows/gitstats.yml
name: GitStats Report
on:
push:
branches: [main]
permissions:
contents: write
jobs:
gitstats:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- uses: shenxianpeng/gitstats-action@v1
with:
deploy-to-pages: true