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 15,226 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 | |
|---|---|---|---|---|---|
| buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy | 3,449 | 1,093 | 192 | 64,189.9 | |
| CHANGES.md | 2,703 | 1,040 | 267 | 54,070.0 | |
| sdks/go.sum | 1,513 | 1,056 | 17 | 41,075.5 | |
| sdks/python/apache_beam/transforms/core.py | 4,362 | 328 | 63 | 21,662.9 | |
| runners/google-cloud-dataflow-java/src/main/java/org/apache/beam/runners/dataflow/DataflowRunner.java | 2,859 | 391 | 77 | 20,906.6 | |
| sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.java | 4,816 | 293 | 86 | 20,333.4 | |
| sdks/java/core/src/test/java/org/apache/beam/sdk/transforms/ParDoTest.java | 7,572 | 231 | 48 | 20,101.0 | |
| sdks/python/setup.py | 725 | 620 | 132 | 16,694.0 | |
| sdks/go.mod | 206 | 1,069 | 22 | 15,343.0 | |
| sdks/python/apache_beam/io/gcp/bigquery.py | 3,431 | 243 | 80 | 14,233.7 |
| File | Lines | Changes | Authors | Score | |
|---|---|---|---|---|---|
| buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy | 3,449 | 1,093 | 192 | 64,189.9 | |
| CHANGES.md | 2,703 | 1,040 | 267 | 54,070.0 | |
| sdks/go.sum | 1,513 | 1,056 | 17 | 41,075.5 | |
| sdks/python/apache_beam/transforms/core.py | 4,362 | 328 | 63 | 21,662.9 | |
| runners/google-cloud-dataflow-java/src/main/java/org/apache/beam/runners/dataflow/DataflowRunner.java | 2,859 | 391 | 77 | 20,906.6 | |
| sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.java | 4,816 | 293 | 86 | 20,333.4 | |
| sdks/java/core/src/test/java/org/apache/beam/sdk/transforms/ParDoTest.java | 7,572 | 231 | 48 | 20,101.0 | |
| sdks/python/setup.py | 725 | 620 | 132 | 16,694.0 | |
| sdks/go.mod | 206 | 1,069 | 22 | 15,343.0 | |
| sdks/python/apache_beam/io/gcp/bigquery.py | 3,431 | 243 | 80 | 14,233.7 | |
| sdks/python/apache_beam/dataframe/frames.py | 5,628 | 185 | 20 | 13,878.7 | |
| sdks/java/io/kafka/src/main/java/org/apache/beam/sdk/io/kafka/KafkaIO.java | 4,169 | 214 | 63 | 13,817.5 | |
| sdks/python/apache_beam/options/pipeline_options.py | 2,624 | 262 | 87 | 13,420.9 | |
| runners/google-cloud-dataflow-java/build.gradle | 1,024 | 400 | 77 | 12,800.0 | |
| website/www/site/content/en/documentation/programming-guide.md | 8,936 | 133 | 53 | 12,572.5 | |
| sdks/java/harness/src/main/java/org/apache/beam/fn/harness/FnApiDoFnRunner.java | 3,026 | 184 | 30 | 10,121.7 | |
| runners/google-cloud-dataflow-java/src/test/java/org/apache/beam/runners/dataflow/DataflowRunnerTest.java | 2,884 | 187 | 48 | 10,042.4 | |
| runners/google-cloud-dataflow-java/worker/src/test/java/org/apache/beam/runners/dataflow/worker/StreamingDataflowWorkerTest.java | 6,629 | 122 | 41 | 9,933.1 | |
| sdks/python/apache_beam/transforms/ptransform_test.py | 3,092 | 173 | 45 | 9,619.8 | |
| sdks/python/apache_beam/pipeline.py | 1,772 | 209 | 56 | 8,797.9 | |
| sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIOWriteTest.java | 5,281 | 120 | 46 | 8,720.5 | |
| sdks/python/apache_beam/runners/worker/bundle_processor.py | 2,280 | 175 | 41 | 8,356.1 | |
| sdks/python/apache_beam/runners/dataflow/dataflow_runner.py | 887 | 280 | 59 | 8,339.1 | |
| sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryServicesImpl.java | 2,193 | 171 | 58 | 8,007.8 | |
| sdks/python/apache_beam/runners/dataflow/internal/apiclient.py | 1,289 | 221 | 61 | 7,934.5 | |
| sdks/python/apache_beam/transforms/util.py | 2,653 | 153 | 50 | 7,880.6 | |
| sdks/python/tox.ini | 569 | 326 | 70 | 7,776.3 | |
| sdks/java/io/jdbc/src/main/java/org/apache/beam/sdk/io/jdbc/JdbcIO.java | 3,028 | 140 | 52 | 7,703.8 | |
| sdks/python/apache_beam/dataframe/frames_test.py | 3,324 | 133 | 25 | 7,668.0 | |
| sdks/java/harness/src/test/java/org/apache/beam/fn/harness/FnApiDoFnRunnerTest.java | 3,742 | 125 | 29 | 7,646.5 | |
| runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/DoFnOperator.java | 1,803 | 169 | 39 | 7,176.0 | |
| sdks/python/apache_beam/runners/common.py | 1,962 | 162 | 40 | 7,175.7 | |
| sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/SpannerIO.java | 3,312 | 123 | 44 | 7,078.6 | |
| runners/google-cloud-dataflow-java/worker/src/main/java/org/apache/beam/runners/dataflow/worker/StreamingDataflowWorker.java | 1,334 | 192 | 53 | 7,012.6 | |
| sdks/python/apache_beam/coders/coders.py | 1,943 | 157 | 48 | 6,920.5 | |
| sdks/python/apache_beam/io/gcp/bigquery_test.py | 3,569 | 115 | 45 | 6,870.2 | |
| sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.java | 2,658 | 131 | 47 | 6,753.8 | |
| runners/google-cloud-dataflow-java/src/main/java/org/apache/beam/runners/dataflow/DataflowPipelineTranslator.java | 1,389 | 176 | 45 | 6,559.4 | |
| sdks/java/io/kafka/src/test/java/org/apache/beam/sdk/io/kafka/KafkaIOTest.java | 2,943 | 119 | 49 | 6,455.7 | |
| runners/core-java/src/main/java/org/apache/beam/runners/core/SimpleDoFnRunner.java | 1,756 | 152 | 26 | 6,369.5 | |
| runners/google-cloud-dataflow-java/src/test/java/org/apache/beam/runners/dataflow/DataflowPipelineTranslatorTest.java | 1,923 | 144 | 37 | 6,314.7 | |
| sdks/python/apache_beam/io/gcp/bigquery_tools.py | 2,217 | 133 | 50 | 6,262.3 | |
| sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/reflect/DoFnSignatures.java | 2,657 | 121 | 31 | 6,237.1 | |
| build.gradle.kts | 1,036 | 190 | 70 | 6,115.5 | |
| sdks/java/io/elasticsearch/src/main/java/org/apache/beam/sdk/io/elasticsearch/ElasticsearchIO.java | 3,034 | 110 | 41 | 6,059.0 | |
| sdks/go/pkg/beam/model/pipeline_v1/beam_runner_api.pb.go | 10,833 | 57 | 21 | 5,932.7 | |
| sdks/python/apache_beam/coders/coder_impl.py | 2,174 | 126 | 40 | 5,874.9 | |
| sdks/python/apache_beam/transforms/util_test.py | 3,246 | 103 | 42 | 5,868.3 | |
| sdks/python/apache_beam/runners/worker/sdk_worker.py | 1,497 | 151 | 43 | 5,842.4 | |
| runners/java-fn-execution/src/test/java/org/apache/beam/runners/fnexecution/control/RemoteExecutionTest.java | 2,261 | 119 | 34 | 5,658.4 | |
| sdks/python/apache_beam/io/iobase.py | 1,938 | 128 | 30 | 5,634.9 | |
| sdks/python/apache_beam/runners/dataflow/internal/apiclient_test.py | 2,037 | 119 | 42 | 5,370.8 | |
| sdks/python/apache_beam/pipeline_test.py | 1,657 | 131 | 39 | 5,332.5 | |
| sdks/java/core/src/main/java/org/apache/beam/sdk/io/TextIO.java | 1,525 | 133 | 36 | 5,193.8 | |
| sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/DoFn.java | 1,539 | 132 | 26 | 5,178.4 | |
| sdks/python/apache_beam/examples/snippets/snippets.py | 1,958 | 117 | 43 | 5,177.2 | |
| sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Combine.java | 2,312 | 105 | 28 | 5,048.7 | |
| sdks/java/harness/src/main/java/org/apache/beam/fn/harness/control/ProcessBundleHandler.java | 1,322 | 137 | 34 | 4,981.2 | |
| sdks/java/harness/src/test/java/org/apache/beam/fn/harness/control/ProcessBundleHandlerTest.java | 2,062 | 107 | 28 | 4,858.8 | |
| sdks/python/apache_beam/yaml/yaml_provider.py | 1,757 | 115 | 17 | 4,820.4 | |
| sdks/go/pkg/beam/core/runtime/graphx/translate.go | 1,531 | 122 | 26 | 4,773.6 | |
| settings.gradle.kts | 400 | 237 | 83 | 4,740.0 | |
| sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/pubsub/PubsubIO.java | 2,036 | 105 | 45 | 4,737.8 | |
| sdks/python/apache_beam/transforms/ptransform.py | 1,266 | 129 | 41 | 4,589.9 | |
| sdks/python/apache_beam/runners/portability/fn_api_runner/fn_runner_test.py | 2,721 | 87 | 25 | 4,538.2 | |
| sdks/go/pkg/beam/model/fnexecution_v1/beam_fn_api.pb.go | 7,035 | 52 | 19 | 4,361.5 | |
| runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/ExecutableStageDoFnOperator.java | 1,337 | 115 | 36 | 4,205.0 | |
| sdks/python/apache_beam/runners/worker/operations.py | 1,541 | 107 | 28 | 4,200.3 | |
| runners/spark/src/main/java/org/apache/beam/runners/spark/translation/TransformTranslator.java | 901 | 139 | 33 | 4,172.3 | |
| sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/Schema.java | 1,522 | 106 | 29 | 4,135.4 | |
| sdks/python/apache_beam/ml/inference/base.py | 2,444 | 83 | 18 | 4,103.3 | |
| sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/datastore/DatastoreV1.java | 2,621 | 80 | 32 | 4,095.7 | |
| sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableIOTest.java | 2,211 | 87 | 38 | 4,090.9 | |
| sdks/python/apache_beam/typehints/typehints.py | 1,640 | 100 | 38 | 4,049.7 | |
| sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/reflect/DoFnSignature.java | 1,760 | 95 | 22 | 3,985.5 | |
| sdks/typescript/package-lock.json | 8,016 | 44 | 8 | 3,939.4 | |
| sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/DoFnTester.java | 918 | 130 | 21 | 3,938.8 | |
| sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/ParDo.java | 1,093 | 119 | 29 | 3,934.2 | |
| sdks/python/apache_beam/transforms/external.py | 1,305 | 107 | 28 | 3,865.4 | |
| sdks/python/apache_beam/examples/snippets/snippets_test.py | 1,527 | 98 | 42 | 3,829.5 | |
| sdks/python/apache_beam/transforms/trigger.py | 1,765 | 91 | 38 | 3,823.1 | |
| sdks/python/apache_beam/ml/inference/base_test.py | 3,157 | 68 | 18 | 3,820.7 | |
| sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryServicesImplTest.java | 2,533 | 75 | 37 | 3,774.7 | |
| runners/flink/src/main/java/org/apache/beam/runners/flink/FlinkStreamingTransformTranslators.java | 1,439 | 99 | 30 | 3,755.5 | |
| .github/workflows/README.md | 533 | 160 | 24 | 3,693.9 | |
| runners/direct-java/src/main/java/org/apache/beam/runners/direct/WatermarkManager.java | 1,840 | 86 | 20 | 3,689.0 | |
| sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryUtils.java | 1,437 | 97 | 36 | 3,677.1 | |
| sdks/java/core/src/main/java/org/apache/beam/sdk/testing/PAssert.java | 1,938 | 83 | 29 | 3,653.9 | |
| sdks/python/apache_beam/runners/direct/transform_evaluator.py | 1,259 | 102 | 32 | 3,619.2 | |
| sdks/java/core/src/main/java/org/apache/beam/sdk/io/FileBasedSink.java | 1,275 | 100 | 32 | 3,570.7 | |
| sdks/python/apache_beam/io/fileio.py | 1,075 | 108 | 34 | 3,541.0 | |
| sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/reflect/ByteBuddyDoFnInvokerFactory.java | 1,605 | 88 | 28 | 3,525.5 | |
| sdks/python/apache_beam/io/textio_test.py | 2,295 | 73 | 35 | 3,497.1 | |
| sdks/python/apache_beam/io/gcp/gcsio.py | 817 | 121 | 43 | 3,458.6 | |
| sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/StorageApiWriteUnshardedRecords.java | 1,492 | 89 | 22 | 3,437.8 | |
| sdks/python/apache_beam/runners/dataflow/dataflow_runner_test.py | 807 | 121 | 44 | 3,437.3 | |
| sdks/java/core/src/main/java/org/apache/beam/sdk/options/PipelineOptionsFactory.java | 2,261 | 72 | 32 | 3,423.6 | |
| sdks/java/core/src/test/java/org/apache/beam/sdk/transforms/reflect/DoFnInvokersTest.java | 1,506 | 87 | 25 | 3,376.2 | |
| sdks/java/io/jdbc/src/test/java/org/apache/beam/sdk/io/jdbc/JdbcIOTest.java | 1,640 | 83 | 39 | 3,361.2 | |
| sdks/java/io/google-cloud-platform/build.gradle | 426 | 159 | 65 | 3,281.7 |
How Apache Beam compares with other Apache projects →
How Apache Beam 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