Apache BeamApache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languages (DSLs). Dataflow pipelines simplify the mechanics of large-scale batch and streaming data processing and can run on a number of runtimes like Apache Flink, Apache Spark, and Google Cloud Dataflow (a cloud service). Beam also brings DSL in different languages, allowing users to easily implement their data integration processes./Hugo -- gohugo.ioApache Beam 2.74.0 <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <p>We are happy to present the new 2.74.0 release of Beam. This release includes both improvements and new functionality. See the <a href="/get-started/downloads/#2740-2026-06-02">download page</a> for this release.</p> <p>For more information on changes in 2.74.0, check out the <a href="https://github.com/apache/beam/milestone/42">detailed release notes</a>.</p> <h2 id="highlights">Highlights</h2> <ul> <li>Spark 4 runner support for Java SDK (<a href="https://github.com/apache/beam/issues/38255">#38255</a>).</li> </ul> <h3 id="ios">I/Os</h3> <ul> <li>IcebergIO: support declaring a table&rsquo;s sort order on dynamic table creation via the new <code>sort_fields</code> config (<a href="https://github.com/apache/beam/issues/38269">#38269</a>).</li> <li>IcebergIO: support writing with hash distribution mode, and with autosharding (<a href="https://github.com/apache/beam/issues/38061">#38061</a>).</li> </ul> <h3 id="new-features--improvements">New Features / Improvements</h3> <ul> <li>Capability introduces an indicator for aggregations and timers firing during a pipeline drain, allowing users and sinks to recognize and appropriately handle potentially incomplete or partial data (<a href="https://github.com/apache/beam/issues/36884">#36884</a>).</li> <li>Added support for setting disk provisioned IOPS and throughput in Dataflow runner via <code>--diskProvisionedIops</code> and <code>--diskProvisionedThroughputMibps</code> pipeline options (Java/Go/Python) (<a href="https://github.com/apache/beam/issues/38349">#38349</a>).</li> <li>TriggerStateMachineRunner changes from BitSetCoder to SentinelBitSetCoder to encode finished bitset. SentinelBitSetCoder and BitSetCoder are state compatible. Both coders can decode encoded bytes from the other coder (<a href="https://github.com/apache/beam/issues/38139">#38139</a>).</li> <li>(Python) Added type alias for with_exception_handling to be used for typehints. (<a href="https://github.com/apache/beam/issues/38173">#38173</a>).</li> <li>(Java) BatchElements transform for Java SDK (<a href="https://github.com/apache/beam/issues/38369">#38369</a>)</li> <li>Added plugin mechanism to support different Lineage implementations (Java) (<a href="https://github.com/apache/beam/issues/36790">#36790</a>).</li> <li>(Python) Supported Python user type in Beam SQL. For example, SQL statements like <code>SELECT some_field from PCOLLECTION</code> can now operate a PCollection of Beam Row containing pickable Python user type (<a href="https://github.com/apache/beam/issues/20738">#20738</a>).</li> <li>(Python) Introduced <code>beam.coders.registry.register_row</code> as preferred API to register a named tuple or dataclass with a Beam Row. At pipelne runtime, the original type associated with the registered row are preserved across the serialization boundary (<a href="https://github.com/apache/beam/issues/38108">#38108</a>).</li> </ul> <h3 id="breaking-changes">Breaking Changes</h3> <ul> <li>(Python) Made Beartype the default fallback type checking tool. This can be disabled with the <code>--disable_beartype</code> pipeline option. (<a href="https://github.com/apache/beam/issues/38275">#38275</a>)</li> </ul> <h3 id="deprecations">Deprecations</h3> <ul> <li>Dropped Java 8 support (<a href="https://github.com/apache/beam/issues/31678">#31678</a>).</li> <li>Removed Samza Runner support (<a href="https://github.com/apache/beam/issues/35448">#35448</a>).</li> </ul> <h3 id="bugfixes">Bugfixes</h3> <ul> <li>Fixed BigQueryEnrichmentHandler batch mode dropping earlier requests when multiple requests share the same enrichment key (Python) (<a href="https://github.com/apache/beam/issues/38035">#38035</a>).</li> <li>Added <code>max_batch_duration_secs</code> passthrough support in Python Enrichment BigQuery and CloudSQL handlers so batching duration can be forwarded to <code>BatchElements</code> (<a href="https://github.com/apache/beam/issues/38243">#38243</a>).</li> </ul> <p>According to git shortlog, the following people contributed to the 2.74.0 release. Thank you to all contributors!</p> <p>Abdelrahman Ibrahim, Ahmed Abualsaud, Andrew Crites, Andrew Kabas, Arran Cudbard-Bell, Arun Pandian, Asish Kumar, Bentsi Leviav, Blake Jones, Bruno Volpato, Chris Jordan, Danny McCormick, Deji Ibrahim, Derrick Williams, Elia LIU, Ganesh Sivakumar, Jack McCluskey, Kenneth Knowles, Lalit Yadav, M Junaid Shaukat, Matej Aleksandrov, Prabhnoor Singh, Radek Stankiewicz, Radosław Stankiewicz, Reuven Lax, RuiLong J., Sam Whittle, Shunping Huang, Subramanya V, Tarun Annapareddy, Tobias Kaymak, TongruiLi, Valentyn Tymofieiev, Vitaly Terentyev, XQ Hu, Yi Hu, ZIHAN DAI, apanich, bambadiouf1, chenxuesdu, claudevdm, harshadkhetpal, johnjcasey, parveensania, tianz101</p>/blog/beam-2.74.0/Tue, 02 Jun 2026 14:00:00 -0500/blog/beam-2.74.0/blogreleaseApache Beam 2.73.0 <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <p>We are happy to present the new 2.73.0 release of Beam. This release includes both improvements and new functionality. See the <a href="/get-started/downloads/#2730-2026-04-29">download page</a> for this release.</p> <p>For more information on changes in 2.73.0, check out the <a href="https://github.com/apache/beam/milestone/41">detailed release notes</a>.</p> <h2 id="highlights">Highlights</h2> <h3 id="ios">I/Os</h3> <ul> <li>DebeziumIO (Java): added <code>OffsetRetainer</code> interface and <code>FileSystemOffsetRetainer</code> implementation to persist and restore CDC offsets across pipeline restarts, and exposed <code>withStartOffset</code> / <code>withOffsetRetainer</code> on <code>DebeziumIO.Read</code> and the cross-language <code>ReadBuilder</code> (<a href="https://github.com/apache/beam/issues/28248">#28248</a>).</li> </ul> <h3 id="new-features--improvements">New Features / Improvements</h3> <ul> <li>(Python) Added BigQuery CDC streaming source (<a href="https://github.com/apache/beam/issues/37724">#37724</a>)</li> <li>Added <code>ADKAgentModelHandler</code> for running Google Agent Development Kit (ADK) agents (Python) (<a href="https://github.com/apache/beam/issues/37917">#37917</a>).</li> <li>(Python) Added exception chaining to preserve error context in CloudSQLEnrichmentHandler, processes utilities, and core transforms (<a href="https://github.com/apache/beam/issues/37422">#37422</a>).</li> <li>(Python) Added a pipeline option <code>--experiments=pip_no_build_isolation</code> to disable build isolation when installing dependencies in the runtime environment (<a href="https://github.com/apache/beam/issues/37331">#37331</a>).</li> <li>(Go) Added OrderedListState support to the Go SDK stateful DoFn API (<a href="https://github.com/apache/beam/issues/37629">#37629</a>).</li> <li>Added support for large pipeline options via a file (Python) (<a href="https://github.com/apache/beam/issues/37370">#37370</a>).</li> <li>Supported infer schema from dataclass (Python) (<a href="https://github.com/apache/beam/issues/22085">#22085</a>). Default coder for typehint-ed (or set with_output_type) for non-frozen dataclasses changed to RowCoder. To preserve the old behavior (fast primitive coder), explicitly register the type with FastPrimitiveCoder.</li> <li>Updates minimum Go version to 1.26.1 (<a href="https://github.com/apache/beam/issues/37897">#37897</a>).</li> <li>(Python) Added image embedding support in <code>apache_beam.ml.rag</code> package (<a href="https://github.com/apache/beam/issues/37628">#37628</a>).</li> <li>(Python) Added support for Python version 3.14 (<a href="https://github.com/apache/beam/issues/37247">#37247</a>).</li> </ul> <h3 id="breaking-changes">Breaking Changes</h3> <ul> <li>The Python SDK container&rsquo;s <code>boot.go</code> now passes pipeline options through a file instead of the <code>PIPELINE_OPTIONS</code> environment variable. If a user pairs a new Python SDK container with an older SDK version (which does not support the file-based approach), the pipeline options will not be recognized and the pipeline will fail. Users must ensure their SDK and container versions are synchronized (<a href="https://github.com/apache/beam/issues/37370">#37370</a>).</li> <li>Python DoFn.with_exception_handling now respects user DoFn typehints. This can break update compatibility if coders change. It can also break pipeline compilation if existing typehints are incorrect. To update safely sepcify the pipeline option <code>--update_compatibility_version=2.72.0</code>. To fix typehints replace any incorrect typehints that were previously ignored (<a href="https://github.com/apache/beam/issues/37590">#37590</a>)</li> </ul> <h3 id="bugfixes">Bugfixes</h3> <ul> <li>Fixed ProcessManager not reaping child processes, causing zombie process accumulation on long-running Flink deployments (Java) (<a href="https://github.com/apache/beam/issues/37930">#37930</a>).</li> </ul> <h3 id="security-fixes">Security Fixes</h3> <ul> <li>Fixed <a href="https://www.cve.org/CVERecord?id=CVE-2023-46604">CVE-2023-46604</a> (CVSS 10.0) and <a href="https://www.cve.org/CVERecord?id=CVE-2022-41678">CVE-2022-41678</a> by upgrading ActiveMQ from 5.14.5 to 5.19.2 (Java) (<a href="https://github.com/apache/beam/issues/37943">#37943</a>).</li> <li>Fixed <a href="https://www.cve.org/CVERecord?id=CVE-2024-1597">CVE-2024-1597</a>, <a href="https://www.cve.org/CVERecord?id=CVE-2022-31197">CVE-2022-31197</a>, and <a href="https://www.cve.org/CVERecord?id=CVE-2022-21724">CVE-2022-21724</a> by upgrading PostgreSQL JDBC Driver from 42.2.16 to 42.6.2 (Java) (<a href="https://github.com/apache/beam/issues/37942">#37942</a>).</li> </ul> <h2 id="list-of-contributors">List of Contributors</h2> <p>According to git shortlog, the following people contributed to the 2.73.0 release. Thank you to all contributors!</p> <p>Abdelrahman Ibrahim, Ahmed Abualsaud, Alex Malao, Alexander Nieuwenhuijse, Andres Tiko, Andrew Crites, Arun Pandian, Bentsi Leviav, Bruno Volpato, Chamikara Jayalath, Chandra Kiran Bolla, Danny McCormick, Deji Ibrahim, Derrick Williams, Elia LIU, Esmelealem, Hannes Gustafsson, Jack McCluskey, Joey Tran, Kenneth Knowles, M Junaid Shaukat, Mansi Singh, Matej Aleksandrov, Mathijs Deelen, Mattie Fu, Praneet Nadella, Radek Stankiewicz, Radosław Stankiewicz, Reuven Lax, RuiLong J., S. Veyrié, Sakthivel Subramanian, Sam Whittle, Shubham Thakur, Shunping Huang, Subramanya V, Tarun Annapareddy, Tobias Kaymak, Valentyn Tymofieiev, Vitaly Terentyev, XQ Hu, Yi Hu, ZIHAN DAI, claudevdm, kishorepola, parveensania</p>/blog/beam-2.73.0/Wed, 29 Apr 2026 09:00:00 -0700/blog/beam-2.73.0/blogreleaseApache Beam 2.72.0 <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <p>We are happy to present the new 2.72.0 release of Beam. This release includes both improvements and new functionality. See the <a href="/get-started/downloads/#2720-2026-03-30">download page</a> for this release.</p> <p>For more information on changes in 2.72.0, check out the <a href="https://github.com/apache/beam/milestone/40">detailed release notes</a>.</p> <h2 id="highlights">Highlights</h2> <ul> <li>Flink 2.0 support (<a href="https://github.com/apache/beam/issues/36947">#36947</a>).</li> </ul> <h3 id="ios">I/Os</h3> <ul> <li>Add Datadog IO support (Java) (<a href="https://github.com/apache/beam/issues/37318">#37318</a>).</li> <li>Remove Pubsublite IO support, since service will be deprecated in March 2026. (<a href="https://github.com/apache/beam/issues/37375">#37375</a>).</li> <li>(Java) ClickHouse - migrating from the legacy JDBC driver (v0.6.3) to ClickHouse Java Client v2 (v0.9.6). See the <a href="https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/clickhouse/ClickHouseIO.html">class documentation</a> for migration guide (<a href="https://github.com/apache/beam/issues/37610">#37610</a>).</li> <li>(Java) Upgraded GoogleAdsIO to use GoogleAdsIO API v23 (<a href="https://github.com/apache/beam/issues/37620">#37620</a>).</li> </ul> <h3 id="new-features--improvements">New Features / Improvements</h3> <ul> <li>(Python) Added exception chaining to preserve error context in CloudSQLEnrichmentHandler, processes utilities, and core transforms (<a href="https://github.com/apache/beam/issues/37422">#37422</a>).</li> <li>(Python) Added a pipeline option <code>--experiments=pip_no_build_isolation</code> to disable build isolation when installing dependencies in the runtime environment (<a href="https://github.com/apache/beam/issues/37331">#37331</a>).</li> </ul> <h3 id="deprecations">Deprecations</h3> <ul> <li>(Python) Removed previously deprecated list_prefix method for filesystem interfaces (<a href="https://github.com/apache/beam/issues/37587">#37587</a>).</li> </ul> <h3 id="bugfixes">Bugfixes</h3> <ul> <li>Fixed (Yaml) issue with validate compatible method (<a href="https://github.com/apache/beam/issues/37588">#37588</a>).</li> <li>Fixed (Yaml) issue with Create transform dealing with different type elements (<a href="https://github.com/apache/beam/issues/37585">#37585</a>).</li> </ul> <h3 id="security-fixes">Security Fixes</h3> <ul> <li>Fixed <a href="https://www.cve.org/CVERecord?id=CVE-2024-28397">CVE-2024-28397</a> by switching from js2py to pythonmonkey (Yaml) (<a href="https://github.com/apache/beam/issues/37560">#37560</a>).</li> </ul> <h2 id="list-of-contributors">List of Contributors</h2> <p>According to git shortlog, the following people contributed to the 2.72.0 release. Thank you to all contributors!</p> <p>Abdelrahman Ibrahim, Ahmed Abualsaud, Andrew Crites, Arun Pandian, Ben Feinstein, Bentsi Leviav, Celeste Zeng, Danny McCormick, Danny Mccormick, Derrick Williams, Elia LIU, Ganesh, Jack McCluskey, Kenneth Knowles, Labesse Kévin, M Junaid Shaukat, Mansi Singh, Mattie Fu, Nayan Mathur, Pablo Estrada, Pirzada Ahmad Faraz, Radek Stankiewicz, Radosław Stankiewicz, Robert Bradshaw, Rohan Sah, RuiLong J., Sakthivel Subramanian, Sam Whittle, Shaheer Amjad, Shunping Huang, Steven van Rossum, Tarun Annapareddy, Tobias Kaymak, Valentyn Tymofieiev, Vitaly Terentyev, Yi Hu, XQ Hu, ZIHAN DAI, apanich, chenxuesdu, claudevdm, franzonia137</p>/blog/beam-2.72.0/Mon, 30 Mar 2026 09:00:00 -0700/blog/beam-2.72.0/blogreleaseApache Beam 2.71.0 <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <p>We are happy to present the new 2.71.0 release of Beam. This release includes both improvements and new functionality. See the <a href="/get-started/downloads/#2710-2026-01-22">download page</a> for this release.</p> <p>For more information on changes in 2.71.0, check out the <a href="https://github.com/apache/beam/milestone/39">detailed release notes</a>.</p> <h2 id="ios">I/Os</h2> <ul> <li>(Java) Elasticsearch 9 Support (<a href="https://github.com/apache/beam/issues/36491">#36491</a>).</li> <li>(Java) Upgraded HCatalogIO to Hive 4.0.1 (<a href="https://github.com/apache/beam/issues/32189">#32189</a>).</li> </ul> <h3 id="new-features--improvements">New Features / Improvements</h3> <ul> <li>Support configuring Firestore database on ReadFn transforms (Java) (<a href="https://github.com/apache/beam/issues/36904">#36904</a>).</li> <li>(Python) Inference args are now allowed in most model handlers, except where they are explicitly/intentionally disallowed (<a href="https://github.com/apache/beam/issues/37093">#37093</a>).</li> </ul> <h3 id="bugfixes">Bugfixes</h3> <ul> <li>Fixed FirestoreV1 Beam connectors allow configuring inconsistent project/database IDs between RPC requests and routing headers #36895 (Java) (<a href="https://github.com/apache/beam/issues/36895">#36895</a>).</li> <li>Logical type and coder registry are saved for pipelines in the case of default pickler (<a href="https://github.com/apache/beam/issues/36271">#36271</a>). This fixes a side effect of switching to cloudpickle as default pickler in Beam 2.65.0 (Python) (<a href="https://github.com/apache/beam/issues/35738">#35738</a>).</li> </ul> <h3 id="known-issues">Known Issues</h3> <p>For the most up to date list of known issues, see <a href="https://github.com/apache/beam/blob/master/CHANGES.md">https://github.com/apache/beam/blob/master/CHANGES.md</a></p> <h2 id="list-of-contributors">List of Contributors</h2> <p>According to git shortlog, the following people contributed to the 2.71.0 release. Thank you to all contributors!</p> <p>Ahmed Abualsaud, Andrew Crites, apanich, Arun, Arun Pandian, assaf127, Chamikara Jayalath, CherisPatelInfocusp, Cheskel Twersky, Claire McGinty, Claude, Danny Mccormick, Derrick Williams, Egbert van der Wal, Evan Galpin, Ganesh, hekk-kaori-maeda, Jack Dingilian, Jack McCluskey, JayajP, Jiang Zhu, Kenneth Knowles, liferoad, M Junaid Shaukat, Nayan Mathur, Noah Stapp, Paco Avila, Radek Stankiewicz, Radosław Stankiewicz, Robert Stupp, Sam Whittle, Shunping Huang, Steven van Rossum, Suvrat Acharya, Tarun Annapareddy, tvalentyn, Utkarsh Parekh, Vitaly Terentyev, Xiaochu Liu, Yala Huang Feng, Yi Hu, Yu Watanabe, zhan7236</p>/blog/beam-2.71.0/Tue, 13 Jan 2026 09:00:00 -0700/blog/beam-2.71.0/blogreleaseApache Beam 2.70.0 <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <p>We are happy to present the new 2.70.0 release of Beam. This release includes both improvements and new functionality. See the <a href="/get-started/downloads/#2700-2025-12-16">download page</a> for this release.</p> <p>For more information on changes in 2.70.0, check out the <a href="https://github.com/apache/beam/milestone/38?closed=1">detailed release notes</a>.</p> <h2 id="highlights">Highlights</h2> <ul> <li>Flink 1.20 support added (<a href="https://github.com/apache/beam/issues/32647">#32647</a>).</li> </ul> <h3 id="new-features--improvements">New Features / Improvements</h3> <ul> <li>Python examples added for Milvus search enrichment handler on <a href="https://beam.apache.org/documentation/transforms/python/elementwise/enrichment-milvus/">Beam Website</a> including jupyter notebook example (Python) (<a href="https://github.com/apache/beam/issues/36176">#36176</a>).</li> <li>Milvus sink I/O connector added (Python) (<a href="https://github.com/apache/beam/issues/36702">#36702</a>). Now Beam has full support for Milvus integration including Milvus enrichment and sink operations.</li> </ul> <h3 id="breaking-changes">Breaking Changes</h3> <ul> <li>(Python) Some Python dependencies have been split out into extras. To ensure all previously installed dependencies are installed, when installing Beam you can <code>pip install apache-beam[gcp,interactive,yaml,redis,hadoop,tfrecord]</code>, though most users will not need all of these extras (<a href="https://github.com/apache/beam/issues/34554">#34554</a>).</li> </ul> <h3 id="deprecations">Deprecations</h3> <ul> <li>(Python) Python 3.9 reached EOL in October 2025 and support for the language version has been removed. (<a href="https://github.com/apache/beam/issues/36665">#36665</a>).</li> </ul> <h2 id="list-of-contributors">List of Contributors</h2> <p>According to git shortlog, the following people contributed to the 2.70.0 release. Thank you to all contributors!</p> <p>Abdelrahman Ibrahim, Ahmed Abualsaud, Alex Chermenin, Andrew Crites, Arun Pandian, Celeste Zeng, Chamikara Jayalath, Chenzo, Claire McGinty, Danny McCormick, Derrick Williams, Dustin Rhodes, Enrique Calderon, Ian Liao, Jack McCluskey, Jessica Hsiao, Joey Tran, Karthik Talluri, Kenneth Knowles, Maciej Szwaja, Mehdi.D, Mohamed Awnallah, Praneet Nadella, Radek Stankiewicz, Radosław Stankiewicz, Reuven Lax, RuiLong J., S. Veyrié, Sam Whittle, Shunping Huang, Stephan Hoyer, Steven van Rossum, Tanu Sharma, Tarun Annapareddy, Tom Stepp, Valentyn Tymofieiev, Vitaly Terentyev, XQ Hu, Yi Hu, changliiu, claudevdm, fozzie15, kristynsmith, wolfchris-google</p>/blog/beam-2.70.0/Tue, 16 Dec 2025 15:00:00 -0500/blog/beam-2.70.0/blogreleaseApache Beam 2.69.0 <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <p>We are happy to present the new 2.69.0 release of Beam. This release includes both improvements and new functionality. See the <a href="/get-started/downloads/#2690-2025-10-28">download page</a> for this release.</p> <p>For more information on changes in 2.69.0, check out the <a href="https://github.com/apache/beam/milestone/37?closed=1">detailed release notes</a>.</p> <h2 id="highlights">Highlights</h2> <ul> <li>(Python) Add YAML Editor and Visualization Panel (<a href="https://github.com/apache/beam/issues/35772">#35772</a>).</li> <li>(Java) Java 25 Support (<a href="https://github.com/apache/beam/issues/35627">#35627</a>).</li> </ul> <h3 id="ios">I/Os</h3> <ul> <li>Upgraded Iceberg dependency to 1.10.0 (<a href="https://github.com/apache/beam/issues/36123">#36123</a>).</li> </ul> <h3 id="new-features--improvements">New Features / Improvements</h3> <ul> <li>Enhance JAXBCoder with XMLInputFactory support (Java) (<a href="https://github.com/apache/beam/issues/36446">#36446</a>).</li> <li>Python examples added for CloudSQL enrichment handler on <a href="https://beam.apache.org/documentation/transforms/python/elementwise/enrichment-cloudsql/">Beam website</a> (Python) (<a href="https://github.com/apache/beam/issues/36095">#35473</a>).</li> <li>Support for batch mode execution in WriteToPubSub transform added (Python) (<a href="https://github.com/apache/beam/issues/35990">#35990</a>).</li> <li>Added official support for Python 3.13 (<a href="https://github.com/apache/beam/issues/34869">#34869</a>).</li> <li>Added an optional output_schema verification to all YAML transforms (<a href="https://github.com/apache/beam/issues/35952">#35952</a>).</li> <li>Support for encryption when using GroupByKey added, along with <code>--gbek</code> pipeline option to automatically replace all GroupByKey transforms (Java/Python) (<a href="https://github.com/apache/beam/issues/36214">#36214</a>).</li> </ul> <h3 id="breaking-changes">Breaking Changes</h3> <ul> <li>(Python) <code>dill</code> is no longer a required, default dependency for Apache Beam (<a href="https://github.com/apache/beam/issues/21298">#21298</a>). <ul> <li>This change only affects pipelines that explicitly use the <code>pickle_library=dill</code> pipeline option.</li> <li>While <code>dill==0.3.1.1</code> is still pre-installed on the official Beam SDK base images, it is no longer a direct dependency of the apache-beam Python package. This means it can be overridden by other dependencies in your environment.</li> <li>If your pipeline uses <code>pickle_library=dill</code>, you must manually ensure <code>dill==0.3.1.1</code> is installed in both your submission and runtime environments. <ul> <li>Submission environment: Install the dill extra in your local environment <code>pip install apache-beam[gcpdill]</code>.</li> <li>Runtime (worker) environment: Your action depends on how you manage your worker&rsquo;s environment. <ul> <li>If using default containers or custom containers with the official Beam base image e.g. <code>FROM apache/beam_python3.10_sdk:2.69.0</code> <ul> <li>Add <code>dill==0.3.1.1</code> to your worker&rsquo;s requirements file (e.g., requirements.txt)</li> <li>Pass this file to your pipeline using the &ndash;requirements_file requirements.txt pipeline option (For more details see <a href="https://cloud.google.com/dataflow/docs/guides/manage-dependencies#py-custom-containers">managing Dataflow dependencies</a>).</li> </ul> </li> <li>If custom containers with a non-Beam base image e.g. <code>FROM python:3.9-slim</code> <ul> <li>Install apache-beam with the dill extra in your docker file e.g. <code>RUN pip install --no-cache-dir apache-beam[gcp,dill]</code></li> </ul> </li> </ul> </li> </ul> </li> <li>If there is a dill version mismatch between submission and runtime environments you might encounter unpickling errors like <code>Can't get attribute '_create_code' on &lt;module 'dill._dill' from...</code>.</li> <li>If dill is not installed in the runtime environment you will see the error <code>ImportError: Pipeline option pickle_library=dill is set, but dill is not installed...</code></li> <li>Report any issues you encounter when using <code>pickle_library=dill</code> to the GitHub issue (<a href="https://github.com/apache/beam/issues/21298">#21298</a>)</li> </ul> </li> <li>(Python) Added a <code>pickle_library=dill_unsafe</code> pipeline option. This allows overriding <code>dill==0.3.1.1</code> using dill as the pickle_library. Use with extreme caution. Other versions of dill has not been tested with Apache Beam (<a href="https://github.com/apache/beam/issues/21298">#21298</a>).</li> <li>(Python) The deterministic fallback coder for complex types like NamedTuple, Enum, and dataclasses now normalizes filepaths for better determinism guarantees. This affects streaming pipelines updating from 2.68 to 2.69 that utilize this fallback coder. If your pipeline is affected, you may see a warning like: &ldquo;Using fallback deterministic coder for type X&hellip;&rdquo;. To update safely sepcify the pipeline option <code>--update_compatibility_version=2.68.0</code> (<a href="https://github.com/apache/beam/pull/36345">#36345</a>).</li> <li>(Python) Fixed transform naming conflict when executing DataTransform on a dictionary of PColls (<a href="https://github.com/apache/beam/issues/30445">#30445</a>). This may break update compatibility if you don&rsquo;t provide a <code>--transform_name_mapping</code>.</li> <li>Removed deprecated Hadoop versions (2.10.2 and 3.2.4) that are no longer supported for <a href="https://github.com/apache/iceberg/issues/10940">Iceberg</a> from IcebergIO (<a href="https://github.com/apache/beam/issues/36282">#36282</a>).</li> <li>(Go) Coder construction on SDK side is more faithful to the specs from runners without stripping length-prefix. This may break streaming pipeline update as the underlying coder could be changed (<a href="https://github.com/apache/beam/issues/36387">#36387</a>).</li> <li>Minimum Go version for Beam Go updated to 1.25.2 (<a href="https://github.com/apache/beam/issues/36461">#36461</a>).</li> <li>(Java) DoFn OutputReceiver now requires implementing a builder method as part of extended metadata support for elements (<a href="https://github.com/apache/beam/issues/34902">#34902</a>).</li> <li>(Java) Removed ProcessContext outputWindowedValue introduced in 2.68 that allowed setting offset and record Id. Use OutputReceiver&rsquo;s builder to set those field (<a href="https://github.com/apache/beam/pull/36523">#36523</a>).</li> </ul> <h3 id="bugfixes">Bugfixes</h3> <ul> <li>Fixed passing of pipeline options to x-lang transforms when called from the Java SDK (Java) (<a href="https://github.com/apache/beam/issues/36443">#36443</a>).</li> <li>PulsarIO has now changed support status from incomplete to experimental. Both read and writes should now minimally function (un-partitioned topics, without schema support, timestamp ordered messages for read) (Java) (<a href="https://github.com/apache/beam/issues/36141">#36141</a>).</li> <li>Fixed Spanner Change Stream reading stuck issue due to watermark of partition moving backwards (<a href="https://github.com/apache/beam/issues/36470">#36470</a>).</li> </ul> <h2 id="list-of-contributors">List of Contributors</h2> <p>According to git shortlog, the following people contributed to the 2.69.0 release. Thank you to all contributors!</p> <p>Abdelrahman Ibrahim, Ahmed Abualsaud, Andrew Crites, Arun Pandian, Bryan Dang, Chamikara Jayalath, Charles Nguyen, Chenzo, Clay Johnson, Danny McCormick, David A, Derrick Williams, Enrique Calderon, Hai Joey Tran, Ian Liao, Ian Mburu, Jack McCluskey, Jiang Zhu, Joey Tran, Kenneth Knowles, Kyle Stanley, Maciej Szwaja, Minbo Bae, Mohamed Awnallah, Radek Stankiewicz, Radosław Stankiewicz, Razvan Culea, Reuven Lax, Sagnik Ghosh, Sam Whittle, Shunping Huang, Steven van Rossum, Talat UYARER, Tanu Sharma, Tarun Annapareddy, Tom Stepp, Valentyn Tymofieiev, Vitaly Terentyev, XQ Hu, Yi Hu, Yilei, claudevdm, flpablo, fozzie15, johnjcasey, lim1t, parveensania, yashu</p>/blog/beam-2.69.0/Tue, 28 Oct 2025 15:00:00 -0500/blog/beam-2.69.0/blogreleaseGoogle Summer of Code 2025 - Enhanced Interactive Pipeline Development Environment for JupyterLab <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <h1 id="gsoc-2025-basic-information">GSoC 2025 Basic Information</h1> <p><strong>Student:</strong> [Canyu Chen] (<a href="https://github.com/Chenzo1001">@Chenzo1001</a>) <strong>Mentors:</strong> [XQ Hu] (<a href="https://github.com/liferoad">@liferoad</a>) <strong>Organization:</strong> [Apache Beam] <strong>Proposal Link:</strong> <a href="https://drive.google.com/file/d/1gmrSUGpXMXujVnFffuj0UWQjbghWI8Oy/view?usp=sharing">Here</a></p> <h1 id="project-overview">Project Overview</h1> <p>BeamVision significantly enhances the Apache Beam development experience within JupyterLab by providing a unified, visual interface for pipeline inspection and analysis. This project successfully delivered a production-ready JupyterLab extension that replaces fragmented workflows with an integrated workspace, featuring a dynamic side panel for pipeline visualization and a multi-tab interface for comparative workflow analysis.</p> <p>Core Achievements:</p> <p>Modernized Extension: Upgraded the JupyterLab Sidepanel to v4.x, ensuring compatibility with the latest ecosystem and releasing the package on both <a href="https://www.npmjs.com/package/apache-beam-jupyterlab-sidepanel">NPM</a> and <a href="https://pypi.org/project/apache-beam-jupyterlab-sidepanel/">PyPI</a>.</p> <p>YAML Visualization Suite: Implemented a powerful visual editor for Beam YAML, combining a code editor, an interactive flow chart (built with @xyflow/react-flow), and a collapsible key-value panel for intuitive pipeline design.</p> <p>Enhanced Accessibility &amp; Stability: Added pip installation support and fixed critical bugs in Interactive Beam, improving stability and user onboarding.</p> <p>Community Engagement: Active participation in the Beam community, including contributing to a hackathon project and successfully integrating all work into the Apache Beam codebase via merged Pull Requests.</p> <h1 id="development-workflow">Development Workflow</h1> <p>As early as the beginning of March, I saw Apache&rsquo;s project information on the official GSoC website and came across Beam among the projects released by Apache. Since I have some interest in front-end development and wanted to truly integrate into the open-source community for development work, I contacted mentor XQ Hu via email and received positive feedback from him. In April, XQ Hu posted notes for all GSoC students on the Beam Mailing List. It was essential to keep an eye on the Mailing List promptly. Between March and May, besides completing the project proposal and preparation work, I also used my spare time to partially migrate the Beam JupyterLab Extension to version 4.0. This helped me get into the development state more quickly.</p> <p>I also participated in the Beam Hackathon held in May. There were several topics to choose from, and I opted for the free topic. This allowed me to implement any innovative work on Beam. I combined Beam and GCP to create an <a href="https://github.com/Chenzo1001/Beam_auto_emotion_analysis">Automatic Emotion Analysis Tool for comments</a>. This tool integrates Beam Pipeline, Flink, Docker, and GCP to collect and perform sentiment analysis on real-time comment stream data, storing the results in GCP&rsquo;s BigQuery. This is a highly meaningful task because sentiment analysis of comments can help businesses better understand users&rsquo; opinions about their products, thereby improving the products more effectively. However, the time during the Hackathon was too tight, so I haven&rsquo;t fully completed this project yet, and it can be further improved later. This Hackathon gave me a deeper understanding of Beam and GCP, and also enhanced my knowledge of the development of the Beam JupyterLab Extension.</p> <p>In June, I officially started the project development and maintained close communication with my mentor to ensure the project progressed smoothly. XQ Hu and I held a half-hour weekly meeting every Monday on Google Meet, primarily to address issues encountered during the previous week&rsquo;s development and to discuss the tasks for the upcoming week. XQ Hu is an excellent mentor, and I had no communication barriers with him whatsoever. He is also very understanding; sometimes, when I needed to postpone some development tasks due to personal reasons, he was always supportive and gave me ample freedom. During this month, I improved the plugin to make it fully compatible with JupyterLab 4.0.</p> <p>In July and August, I made some modifications to the plugin&rsquo;s source code structure and published it on PyPI to facilitate user installation and promote the plugin. During this period, I also fixed several bugs. Afterwards, I began developing a new feature: the YAML visual editor (design doc <a href="https://s.apache.org/beam-yaml-jupyterlab">HERE</a>). This feature is particularly meaningful because Beam&rsquo;s Pipeline is described through YAML files, and a visual editor for YAML files can significantly improve developers&rsquo; efficiency. In July, I published the proposal for the YAML visual editor and, after gathering feedback from the community for some time, started working on its development. Initially, I planned to use native Cytoscape to build the plugin from scratch, but the workload was too heavy, and there were many mature flow chart plugins in the open-source community that could be referenced. Therefore, I chose XYFlow as the component for flow visualization and integrated it into the plugin. In August, I further optimized the YAML visual editor and fixed some bugs.</p> <img src="/images/blog/gsoc-25-jupyterlab-extensions/Yaml_main.png" alt="Main page of the YAML visual editor" width="100%"> <p>In September, I completed the project submission, passed Google&rsquo;s review, and successfully concluded the project.</p> <h1 id="development-conclusion">Development Conclusion</h1> <p>Overall, collaborating with Apache Beam&rsquo;s developers was a very enjoyable process. I learned a lot about Beam, and since I am a student engaged in high-performance geographic computing research, Beam may play a significant role in my future studies and work.</p> <p>I am excited to remain an active member of the Beam community. I hope to continue contributing to its development, applying what I have learned to both my academic pursuits and future collaborative projects. The experience has strengthened my commitment to open-source innovation and has set a strong foundation for ongoing participation in Apache Beam and related technologies.</p> <h1 id="special-thanks">Special Thanks</h1> <p>I would like to express my sincere gratitude to my mentor XQ Hu for his guidance and support throughout the project. Without his help, I would not have been able to complete this project successfully. His professionalism, patience, and passion have been truly inspiring. As a Google employee, he consistently dedicated time each week to the open-source community and willingly assisted students like me. His selfless dedication to open source is something I deeply admire and strive to emulate. He is also an exceptionally devoted teacher who not only imparted technical knowledge but also taught me how to communicate more effectively, handle interpersonal relationships, and collaborate better in a team setting. He always patiently addressed my questions and provided invaluable advice. I am immensely grateful to him and hope to have the opportunity to work with him again in the future.</p> <p>I also want to thank the Apache Beam community for their valuable feedback and suggestions, which have greatly contributed to the improvement of the plugin. I feel incredibly fortunate that we, as a society, have open-source communities where individuals contribute their intellect and time to drive collective technological progress and innovation. These communities provide students like me with invaluable opportunities to grow and develop rapidly.</p> <p>Finally, I would like to thank the Google Summer of Code program for providing me with this opportunity to contribute to open-source projects and gain valuable experience. Without Google Summer of Code, I might never have had the chance to engage with so many open-source projects, take that first step into the open-source community, or experience such substantial personal and professional growth.</p>/blog/gsoc-25-jupyterlab-extensions/Tue, 14 Oct 2025 00:00:00 +0800/blog/gsoc-25-jupyterlab-extensions/bloggsocGoogle Summer of Code 2025 - Beam ML Vector DB/Feature Store integrations <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <h2 id="what-will-i-cover-in-this-blog-post">What Will I Cover In This Blog Post?</h2> <p>I have three objectives in mind when writing this blog post:</p> <ul> <li>Documenting the work I&rsquo;ve been doing during this GSoC period in collaboration with the Apache Beam community</li> <li>A thoughtful and cumulative thank you to my mentor and the Beam Community</li> <li>Writing to an older version of myself before making my first ever contribution to Beam. This can be helpful for future contributors</li> </ul> <h2 id="what-was-this-gsoc-project-about">What Was This GSoC Project About?</h2> <p>The goal of this project is to enhance Beam&rsquo;s Python SDK by developing connectors for vector databases like Milvus and feature stores like Tecton. These integrations will improve support for ML use cases such as Retrieval-Augmented Generation (RAG) and feature engineering. By bridging Beam with these systems, this project will attract more users, particularly in the ML community.</p> <h2 id="why-was-this-project-important">Why Was This Project Important?</h2> <p>While Beam&rsquo;s Python SDK supports some vector databases, feature stores and embedding generators, the current integrations are limited to a few systems as mentioned in the tables down below. Expanding this ecosystem will provide more flexibility and richness for ML workflows particularly in feature engineering and RAG applications, potentially attracting more users, particularly in the ML community.</p> <table> <thead> <tr> <th>Vector Database</th> <th>Feature Store</th> <th>Embedding Generator</th> </tr> </thead> <tbody> <tr> <td>BigQuery</td> <td>Vertex AI</td> <td>Vertex AI</td> </tr> <tr> <td>AlloyDB</td> <td>Feast</td> <td>Hugging Face</td> </tr> </tbody> </table> <h2 id="why-did-i-choose-beam-as-part-of-gsoc-among-180-orgs">Why Did I Choose Beam As Part of GSoC Among 180+ Orgs?</h2> <p>I chose to apply to Beam from among 180+ GSoC organizations because it aligns well with my passion for data processing systems that serve information retrieval systems and my core career values:</p> <ul> <li> <p><strong>Freedom:</strong> Working on Beam supports open-source development, liberating developers from vendor lock-in through its unified programming model while enabling services like <a href="https://projectshield.withgoogle.com/landing">Project Shield</a> to protect free speech globally</p> </li> <li> <p><strong>Innovation:</strong> Working on Beam allows engagement with cutting-edge data processing techniques and distributed computing paradigms</p> </li> <li> <p><strong>Accessibility:</strong> Working on Beam helps build open-source technology that makes powerful data processing capabilities available to all organizations regardless of size or resources. This accessibility enables projects like Project Shield to provide free protection to media, elections, and human rights websites worldwide</p> </li> </ul> <h2 id="what-did-i-work-on-during-the-gsoc-program">What Did I Work On During the GSoC Program?</h2> <p>During my GSoC program, I focused on developing connectors for vector databases, feature stores, and embedding generators to enhance Beam&rsquo;s ML capabilities. Here are the artifacts I worked on and what remains to be done:</p> <table> <thead> <tr> <th>Type</th> <th>System</th> <th>Artifact</th> </tr> </thead> <tbody> <tr> <td>Enrichment Handler</td> <td>Milvus</td> <td><a href="https://github.com/apache/beam/pull/35216">PR #35216</a> <br> <a href="https://github.com/apache/beam/pull/35577">PR #35577</a> <br> <a href="https://github.com/apache/beam/pull/35467">PR #35467</a></td> </tr> <tr> <td>Sink I/O</td> <td>Milvus</td> <td><a href="https://github.com/apache/beam/pull/35708">PR #35708</a> <br> <a href="https://github.com/apache/beam/pull/35944">PR #35944</a></td> </tr> <tr> <td>Enrichment Handler</td> <td>Tecton</td> <td><a href="https://github.com/apache/beam/pull/36062">PR #36062</a></td> </tr> <tr> <td>Sink I/O</td> <td>Tecton</td> <td><a href="https://github.com/apache/beam/pull/36078">PR #36078</a></td> </tr> <tr> <td>Embedding Gen</td> <td>OpenAI</td> <td><a href="https://github.com/apache/beam/pull/36081">PR #36081</a></td> </tr> <tr> <td>Embedding Gen</td> <td>Anthropic</td> <td>To Be Added</td> </tr> </tbody> </table> <p>Here are side-artifacts that are not directly linked to my project:</p> <table> <thead> <tr> <th>Type</th> <th>System</th> <th>Artifact</th> </tr> </thead> <tbody> <tr> <td>AI Code Review</td> <td>Gemini Code Assist</td> <td><a href="https://github.com/apache/beam/pull/35532">PR #35532</a></td> </tr> <tr> <td>Enrichment Handler</td> <td>CloudSQL</td> <td><a href="https://github.com/apache/beam/pull/34398">PR #34398</a> <br> <a href="https://github.com/apache/beam/pull/35473">PR #35473</a></td> </tr> <tr> <td>Pytest Markers</td> <td>GitHub CI</td> <td><a href="https://github.com/apache/beam/pull/35655">PR #35655</a> <br> <a href="https://github.com/apache/beam/pull/35740">PR #35740</a> <br> <a href="https://github.com/apache/beam/pull/35816">PR #35816</a></td> </tr> </tbody> </table> <p>For more granular contributions, checking out my <a href="https://github.com/apache/beam/pulls?q=is%3Apr+author%3Amohamedawnallah">ongoing Beam contributions</a>.</p> <h2 id="how-did-i-approach-this-project">How Did I Approach This Project?</h2> <p>My approach centered on community-driven design and iterative implementation, Originally inspired by my mentor&rsquo;s work. Here&rsquo;s how it looked:</p> <ol> <li><strong>Design Document</strong>: Created a comprehensive design document outlining the proposed ML connector architecture</li> <li><strong>Community Feedback</strong>: Shared the design with the Beam developer community mailing list for review</li> <li><strong>Iterative Implementation</strong>: Incorporated community feedback and applied learnings in subsequent pull requests</li> <li><strong>Continuous Improvement</strong>: Refined the approach based on real-world usage patterns and maintainer guidance</li> </ol> <p>Here are some samples of those design docs:</p> <table> <thead> <tr> <th>Component</th> <th>Type</th> <th>Design Document</th> </tr> </thead> <tbody> <tr> <td>Milvus</td> <td>Vector Enrichment Handler</td> <td><a href="https://lists.apache.org/thread/4c6l20tjopd94cqg6vsgj20xl2qgywtx">[Proposal][GSoC 2025] Milvus Vector Enrichment Handler for Beam</a></td> </tr> <tr> <td>Milvus</td> <td>Vector Sink I/O Connector</td> <td><a href="https://lists.apache.org/thread/cwlbwnhnf1kl7m0dn40jrqfsf4ho98tf">[Proposal][GSoC 2025] Milvus Vector Sink I/O Connector for Beam</a></td> </tr> <tr> <td>Tecton</td> <td>Feature Store Enrichment Handler</td> <td><a href="https://lists.apache.org/thread/7ynn4r8b8b1c47ojxlk39fhsn3t0jrd1">[Proposal][GSoC 2025] Tecton Feature Store Enrichment Handler for Beam</a></td> </tr> <tr> <td>Tecton</td> <td>Feature Store Sink I/O Connector</td> <td><a href="https://lists.apache.org/thread/dthd3t6md9881ksvbf4v05rxnlj1fgvn">[Proposal][GSoC 2025] Tecton Feature Store Sink I/O Connector for Beam</a></td> </tr> </tbody> </table> <h2 id="where-did-challenges-arise-during-the-project">Where Did Challenges Arise During The Project?</h2> <p>There were 2 places where challenges arose:</p> <ul> <li> <p><strong>Running Docker TestContainers in Beam Self-Hosted CI Environment:</strong> The main challenge was that Beam runs in CI on Ubuntu 20.04, which caused compatibility and connectivity issues with Milvus TestContainers due to the Docker-in-Docker environment. After several experiments with trial and error, I eventually tested with Ubuntu latest (which at the time of writing this blog post is Ubuntu 25.04), and no issues arose. This version compatibility problem led to the container startup failures and network connectivity issues</p> </li> <li> <p><strong>Triggering and Modifying the PostCommit Python Workflows:</strong> This challenge magnified the above issue since for every experiment update to the given workflow, I had to do a round trip to my mentor to include those changes in the relevant workflow files and evaluate the results. I also wasn&rsquo;t aware that someone can trigger post-commit Python workflows by updating the trigger files in <code>.github/trigger_files</code> until near the middle of GSoC. I discovered there is actually a workflows README document in <code>.github/workflows/README.md</code> that was not referenced in the <code>CONTRIBUTING.md</code> file at the time of writing this post</p> </li> </ul> <h2 id="how-did-this-project-start-to-attract-users-in-the-ml-community">How Did This Project Start To Attract Users in the ML Community?</h2> <p>It is observed that after we had a Milvus Enrichment Handler PR before even merging, we started to see community-driven contributions like <a href="https://github.com/apache/beam/pull/35686">this one that adds Qdrant</a>. Qdrant is a competitor to Milvus in the vector space. This demonstrates how the project&rsquo;s momentum and visibility in the ML community space attracted contributors who wanted to expand the Beam ML ecosystem with additional vector database integrations.</p> <h2 id="how-did-this-gsoc-experience-working-with-beam-community-shape-me">How Did This GSoC Experience Working With Beam Community Shape Me?</h2> <p>If I have to boil it down across three dimensions, they would be:</p> <ul> <li><strong>Mindset:</strong> Before I was probably working in solitude making PRs about new integrations with mental chatter in the form of fingers crossed, hoping that there will be no divergence on the design. Now I can engage people I am working with through design docs, making sure my work aligns with their vision, which potentially leads to faster PR merges</li> <li><strong>Skillset:</strong> It was one year before contributing to Beam where I wrote professionally in Python, so it was a great opprtunity to brush up on my Python skills and seeing how some design patterns are used in practice, like the query builder pattern seen in CloudSQL Vector Ingestion in the RAG package. I also learned about vector databases and feature stores, and also some AI integrations. I also think I got a bit better than before in root cause analysis and filtering signals from noise in long log files like PostCommit Python workflows</li> <li><strong>Toolset:</strong> Learning about Beam Python SDK, Milvus, Tecton, Google CloudSQL, OpenAI and Anthropic text embedding generators, and lnav for effective log file navigation, including their capabilities and limitations</li> </ul> <h2 id="tips-for-future-contributors">Tips for Future Contributors</h2> <p>If I have to boil them down to three, they would be:</p> <ul> <li><strong>Observing:</strong> Observing how experienced developers in the Beam dev team work—how their PRs look, how they write design docs, what kind of feedback they get on their design docs and PRs, and how you can apply it (if feasible) to avoid getting the same feedback again. What kind of follow-up PRs do they create after their initial ones? How do they document and illustrate their work? What kind of comments do they post when reviewing other people&rsquo;s related work? Over time, you build your own mental model and knowledge base on how the ideal contribution looks in this area. There is a lot to learn and explore in an exciting, not intimidating way</li> <li><strong>Orienting:</strong> Understanding your place in the ecosystem and aligning your work with the project&rsquo;s context. This means grasping how your contribution fits into Beam&rsquo;s architecture and roadmap, identifying your role in addressing current gaps, and mapping stakeholders who will review, use, and maintain your work. Most importantly, align with both your mentor&rsquo;s vision and the community&rsquo;s vision to ensure your work serves the broader goals</li> <li><strong>Acting:</strong> Acting on feedback from code reviews, design document discussions, and community input. This means thoughtfully addressing suggested changes in a way that moves the discussion forward, addressing concerns raised by maintainers, and iterating on your work based on community guidance. Being responsive to feedback, asking clarifying questions when needed, and demonstrating that you&rsquo;re incorporating the community&rsquo;s input into your contributions given that it is aligned with the project direction</li> </ul> <h2 id="who-do-i-want-to-thank-for-making-this-journey-possible">Who Do I Want To Thank for Making This Journey Possible?</h2> <p>If I have to boil them down to three, they would be:</p> <ul> <li><strong>My Mentor, Danny McCormick:</strong> I wouldn&rsquo;t hesitate to say that Danny is the best mentor I have worked with so far, given that I have worked with several mentors. What makes me say that: <ul> <li><strong>Generosity:</strong> Danny is very generous with his time, feedback, and genuinely committed to reviewing my work on a regular basis. We have weekly 30-minute sync calls over almost 21 weeks (5 months) since the official community bonding period, where he shares with me his contextual expertise and addresses any questions I may have with openness to extend time if needed and flexible about skipping calls when there was no agenda</li> <li><strong>Flexibility:</strong> When I got accepted to GSoC, after a few days I also got accepted to a part-time internship that I had applied to before GSoC, while also managing my last semester in my Bachelor of Computer Science, which was probably the hardest semester. During our discussion about working capacity, Danny was very flexible regarding that, with more emphasis on making progress, which encouraged me to make even more progress. I have also never felt there are very hard boundaries around my project scope—I felt there was an area to explore that motivated me to think of and add some side-artifacts to Beam, e.g., adding Gemini Code Assist for AI code review</li> <li><strong>Proactivity</strong>: Danny was very proactive in offering support and help without originally asking, e.g., making Beam Infra tickets that add API keys to unblock my work</li> </ul> </li> <li><strong>Beam Community:</strong> From my first ever contribution to Beam <a href="https://github.com/apache/beam/issues/32840#issuecomment-2424055627">adding FlattenWith and Tee examples to the playground</a>, I was welcomed with open arms and felt encouraged to make more contributions. Also, for their valuable comments on my design documents on the dev mailing list as well as the PRs</li> <li><strong>Google:</strong> I would like to genuinely thank Google for introducing me to open source in <a href="https://summerofcode.withgoogle.com/archive/2023/projects/u7Y9S6sc">GSoC 2023</a> and giving me a second chance to interact with Apache Beam through GSoC 2025. Without it, I probably wouldn&rsquo;t be here writing this blog post, nor would I have this fruitful experience</li> </ul> <h2 id="whats-next">What&rsquo;s Next?</h2> <p>I am now focusing on helping move the remaining artifacts in this project scope from the in-progress state to the merging state. After this, I would love to keep my contributions alive in Beam Python and Go SDK, to name a few. I would also love to connect with you all on my <a href="https://www.linkedin.com/in/mohamedawnallah/">LinkedIn</a> and <a href="https://github.com/mohamedawnallah">GitHub</a>.</p> <h2 id="references">References</h2> <ul> <li><a href="https://summerofcode.withgoogle.com/programs/2025/projects/X32yGjqz">Google Summer of Code Project Listing</a></li> <li><a href="https://docs.google.com/document/d/1YOeK3jb94kSOUxucfqeZL0pkRI08dYljV_4v5SH5i5U/edit?usp=sharing">Original GSoC Proposal</a></li> <li><a href="https://github.com/apache/beam/issues/35046">GSoC 2025 Tracking Issue</a></li> </ul>/blog/gsoc-25-ml-connectors/Fri, 26 Sep 2025 00:00:00 -0400/blog/gsoc-25-ml-connectors/bloggsocGoogle Summer of Code 2025 - Beam YAML, Kafka and Iceberg User Accessibility <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <p>The relatively new Beam YAML SDK was introduced in the spirit of making data processing easy, but it has gained little adoption for complex ML tasks and hasn’t been widely used with <a href="https://beam.apache.org/documentation/io/managed-io/">Managed I/O</a> such as Kafka and Iceberg. As part of Google Summer of Code 2025, new illustrative, production-ready pipeline examples of ML use cases with Kafka and Iceberg data sources using the YAML SDK have been developed to address this adoption gap.</p> <h2 id="context">Context</h2> <p>The YAML SDK was introduced in Spring 2024 as Beam’s first no-code SDK. It follows a declarative approach of defining a data processing pipeline using a YAML DSL, as opposed to other programming language specific SDKs. At the time, it had few meaningful examples and documentation to go along with it. Key missing examples were ML workflows and integration with the Kafka and Iceberg Managed I/O. Foundational work had already been done to add support for ML capabilities as well as Kafka and Iceberg IO connectors in the YAML SDK, but there were no end-to-end examples demonstrating their usage.</p> <p>Beam, as well as Kafka and Iceberg, are mainstream big data technologies but they also have a learning curve. The overall theme of the project is to help democratize data processing for scientists and analysts who traditionally don’t have a strong background in software engineering. They can now refer to these meaningful examples as the starting point, helping them onboard faster and be more productive when authoring ML/data pipelines to their use cases with Beam and its YAML DSL.</p> <h2 id="contributions">Contributions</h2> <p>The data pipelines/workflows developed are production-ready: Kafka and Iceberg data sources are set up on GCP, and the data used are raw public datasets. The pipelines are tested end-to-end on Google Cloud Dataflow and are also unit tested to ensure correct transformation logic.</p> <p>Delivered pipelines/workflows, each with documentation as README.md, address 4 main ML use cases below:</p> <ol> <li> <p><strong>Streaming Classification Inference</strong>: A streaming ML pipeline that demonstrates Beam YAML capability to perform classification inference on a stream of incoming data from Kafka. The overall workflow also includes DistilBERT model deployment and serving on Google Cloud Vertex AI where the pipeline can access for remote inferences. The pipeline is applied to a sentiment analysis task on a stream of YouTube comments, preprocessing data and classifying whether a comment is positive or negative. See <a href="https://github.com/apache/beam/blob/master/sdks/python/apache_beam/yaml/examples/transforms/ml/sentiment_analysis/streaming_sentiment_analysis.yaml">pipeline</a> and <a href="https://github.com/apache/beam/tree/master/sdks/python/apache_beam/yaml/examples/transforms/ml/sentiment_analysis">documentation</a>.</p> </li> <li> <p><strong>Streaming Regression Inference</strong>: A streaming ML pipeline that demonstrates Beam YAML capability to perform regression inference on a stream of incoming data from Kafka. The overall workflow also includes custom model training, deployment and serving on Google Cloud Vertex AI where the pipeline can access for remote inferences. The pipeline is applied to a regression task on a stream of taxi rides, preprocessing data and predicting the fare amount for every ride. See <a href="https://github.com/apache/beam/blob/master/sdks/python/apache_beam/yaml/examples/transforms/ml/taxi_fare/streaming_taxifare_prediction.yaml">pipeline</a> and <a href="https://github.com/apache/beam/tree/master/sdks/python/apache_beam/yaml/examples/transforms/ml/taxi_fare">documentation</a>.</p> </li> <li> <p><strong>Batch Anomaly Detection</strong>: A ML workflow that demonstrates ML-specific transformations and reading from/writing to Iceberg IO. The workflow contains unsupervised model training and several pipelines that leverage Iceberg for storing results, BigQuery for storing vector embeddings and MLTransform for computing embeddings to demonstrate an end-to-end anomaly detection workflow on a dataset of system logs. See <a href="https://github.com/apache/beam/blob/master/sdks/python/apache_beam/yaml/examples/transforms/ml/log_analysis/batch_log_analysis.sh">workflow</a> and <a href="https://github.com/apache/beam/tree/master/sdks/python/apache_beam/yaml/examples/transforms/ml/log_analysis">documentation</a>.</p> </li> <li> <p><strong>Feature Engineering &amp; Model Evaluation</strong>: A ML workflow that demonstrates Beam YAML capability to do feature engineering which is subsequently used for model evaluation, and its integration with Iceberg IO. The workflow contains model training and several pipelines, showcasing an end-to-end Fraud Detection MLOps solution that generates features and evaluates models to detect credit card transaction frauds. See <a href="https://github.com/apache/beam/blob/master/sdks/python/apache_beam/yaml/examples/transforms/ml/fraud_detection/fraud_detection_mlops_beam_yaml_sdk.ipynb">workflow</a> and <a href="https://github.com/apache/beam/tree/master/sdks/python/apache_beam/yaml/examples/transforms/ml/fraud_detection">documentation</a>.</p> </li> </ol> <h2 id="challenges">Challenges</h2> <p>The main challenge of the project was a lack of previous YAML pipeline examples and good documentation to rely on. Unlike the Python or Java SDKs where there are already many notebooks and end-to-end examples demonstrating various use cases, the examples for YAML SDK only involved simple transformations such as filter, group by, etc. More complex transforms like <code>MLTransform</code> and <code>ReadFromIceberg</code> had no examples and requires configurations that didn&rsquo;t have clear API reference at the time. As a result, there were a lot of deep dives into the actual implementation of the PTransforms across YAML, Python and Java SDKs to understand the error messages and how to correctly use the transforms.</p> <p>Another challenge was writing unit tests for the pipeline to ensure that the pipeline’s logic is correct. It was a learning curve to understand how the existing test suite is set up and how it can be used to write unit tests for the data pipelines. A lot of time was spent on properly writing mocks for the pipeline&rsquo;s sources and sinks, as well as for the transforms that require external services such as Vertex AI.</p> <h2 id="conclusion--personal-thoughts">Conclusion &amp; Personal Thoughts</h2> <p>These production-ready pipelines demonstrate the potential of Beam YAML SDK to author complex ML workflows that interact with Iceberg and Kafka. The examples are a nice addition to Beam, especially with Beam 3.0.0 milestones coming up where low-code/no-code, ML capabilities and Managed I/O are focused on.</p> <p>I had an amazing time working with the big data technologies Beam, Iceberg, and Kafka as well as many Google Cloud services (Dataflow, Vertex AI and Google Kubernetes Engine, to name a few). I’ve always wanted to work more in the ML space, and this experience has been a great growth opportunity for me. Google Summer of Code this year has been selective, and the project&rsquo;s success would not have been possible without the support of my mentor, Chamikara Jayalath. It&rsquo;s been a pleasure working closely with him and the broader Beam community to contribute to this open-source project that has a meaningful impact on the data engineering community.</p> <p>My advice for future Google Summer of Code participants is to first and foremost research and choose a project that aligns closely with your interest. Most importantly, spend a lot of time making yourself visible and writing a good proposal when the program is opened for applications. Being visible (e.g. by sharing your proposal, or generally any ideas and questions on the project&rsquo;s communication channel early on) makes it more likely for you to be selected; and a good proposal not only will make you even more likely to be in the program, but also give you a lot of confidence when contributing to and completing the project.</p> <h2 id="references">References</h2> <ul> <li><a href="https://summerofcode.withgoogle.com/programs/2025/projects/f4kiDdus">Google Summer of Code Project Listing</a></li> <li><a href="https://docs.google.com/document/d/1MSAVF6X9ggtVZbqz8YJGmMgkolR_dve0Lr930cByyac/edit?usp=sharing">Google Summer of Code Final Report</a></li> </ul>/blog/gsoc-25-yaml-user-accessibility/Tue, 23 Sep 2025 00:00:00 -0400/blog/gsoc-25-yaml-user-accessibility/bloggsocApache Beam 2.68.0 <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <p>We are happy to present the new 2.68.0 release of Beam. This release includes both improvements and new functionality. See the <a href="/get-started/downloads/#2680-2025-09-??">download page</a> for this release.</p> <p>For more information on changes in 2.68.0, check out the <a href="https://github.com/apache/beam/milestone/36?closed=1">detailed release notes</a>.</p> <h2 id="highlights">Highlights</h2> <ul> <li>[Python] Prism runner now enabled by default for most Python pipelines using the direct runner (<a href="https://github.com/apache/beam/pull/34612">#34612</a>). This may break some tests, see <a href="https://github.com/apache/beam/pull/34612">https://github.com/apache/beam/pull/34612</a> for details on how to handle issues.</li> </ul> <h3 id="ios">I/Os</h3> <ul> <li>Upgraded Iceberg dependency to 1.9.2 (<a href="https://github.com/apache/beam/pull/35981">#35981</a>)</li> </ul> <h3 id="new-features--improvements">New Features / Improvements</h3> <ul> <li>BigtableRead Connector for BeamYaml added with new Config Param (<a href="https://github.com/apache/beam/pull/35696">#35696</a>)</li> <li>MongoDB Java driver upgraded from 3.12.11 to 5.5.0 with API refactoring and GridFS implementation updates (Java) (<a href="https://github.com/apache/beam/pull/35946">#35946</a>).</li> <li>Introduced a dedicated module for JUnit-based testing support: <code>sdks/java/testing/junit</code>, which provides <code>TestPipelineExtension</code> for JUnit 5 while maintaining backward compatibility with existing JUnit 4 <code>TestRule</code>-based tests (Java) (<a href="https://github.com/apache/beam/issues/18733">#18733</a>, <a href="https://github.com/apache/beam/pull/35688">#35688</a>). <ul> <li>To use JUnit 5 with Beam tests, add a test-scoped dependency on <code>org.apache.beam:beam-sdks-java-testing-junit</code>.</li> </ul> </li> <li>Google CloudSQL enrichment handler added (Python) (<a href="https://github.com/apache/beam/pull/34398">#34398</a>). Beam now supports data enrichment capabilities using SQL databases, with built-in support for: <ul> <li>Managed PostgreSQL, MySQL, and Microsoft SQL Server instances on CloudSQL</li> <li>Unmanaged SQL database instances not hosted on CloudSQL (e.g., self-hosted or on-premises databases)</li> </ul> </li> <li>[Python] Added the <code>ReactiveThrottler</code> and <code>ThrottlingSignaler</code> classes to streamline throttling behavior in DoFns, expose throttling mechanisms for users (<a href="https://github.com/apache/beam/pull/35984">#35984</a>)</li> <li>Added a pipeline option to specify the processing timeout for a single element by any PTransform (Java/Python/Go) (<a href="https://github.com/apache/beam/issues/35174">#35174</a>). <ul> <li>When specified, the SDK harness automatically restarts if an element takes too long to process. Beam runner may then retry processing of the same work item.</li> <li>Use the <code>--element_processing_timeout_minutes</code> option to reduce the chance of having stalled pipelines due to unexpected cases of slow processing, where slowness might not happen again if processing of the same element is retried.</li> </ul> </li> <li>(Python) Adding GCP Spanner Change Stream support for Python (apache_beam.io.gcp.spanner) (<a href="https://github.com/apache/beam/issues/24103">#24103</a>).</li> </ul> <h3 id="breaking-changes">Breaking Changes</h3> <ul> <li>Previously deprecated Beam ZetaSQL component has been removed (<a href="https://github.com/apache/beam/issues/34423">#34423</a>). ZetaSQL users could migrate to Calcite SQL with BigQuery dialect enabled.</li> <li>Upgraded Beam vendored Calcite to 1.40.0 for Beam SQL (<a href="https://github.com/apache/beam/issues/35483">#35483</a>), which improves support for BigQuery and other SQL dialects. Note: Minor behavior changes are observed such as output significant digits related to casting.</li> <li>(Python) The deterministic fallback coder for complex types like NamedTuple, Enum, and dataclasses now uses cloudpickle instead of dill. If your pipeline is affected, you may see a warning like: &ldquo;Using fallback deterministic coder for type X&hellip;&rdquo;. You can revert to the previous behavior by using the pipeline option <code>--update_compatibility_version=2.67.0</code> (<a href="https://github.com/apache/beam/pull/35725">35725</a>). Report any pickling related issues to <a href="https://github.com/apache/beam/issues/34903">#34903</a></li> <li>(Python) Prism runner now enabled by default for most Python pipelines using the direct runner (<a href="https://github.com/apache/beam/pull/34612">#34612</a>). This may break some tests, see <a href="https://github.com/apache/beam/pull/34612">https://github.com/apache/beam/pull/34612</a> for details on how to handle issues.</li> <li>Dropped Java 8 support for <a href="https://central.sonatype.com/artifact/org.apache.beam/beam-sdks-java-io-expansion-service">IO expansion-service</a>. Cross-language pipelines using this expansion service will need a Java11+ runtime (<a href="https://github.com/apache/beam/pull/35981">#35981</a>.</li> </ul> <h3 id="deprecations">Deprecations</h3> <ul> <li>Python SDK native SpannerIO (apache_beam/io/gcp/experimental/spannerio) is deprecated. Use cross-language wrapper (apache_beam/io/gcp/spanner) instead (Python) (<a href="https://github.com/apache/beam/issues/35860">#35860</a>).</li> <li>Samza runner is deprecated and scheduled for removal in Beam 3.0 (<a href="https://github.com/apache/beam/issues/35448">#35448</a>).</li> <li>Twister2 runner is deprecated and scheduled for removal in Beam 3.0 (<a href="https://github.com/apache/beam/issues/35905">#35905</a>)).</li> </ul> <h3 id="bugfixes">Bugfixes</h3> <ul> <li>(Python) Fixed Java YAML provider fails on Windows (<a href="https://github.com/apache/beam/issues/35617">#35617</a>).</li> <li>Fixed BigQueryIO creating temporary datasets in wrong project when temp_dataset is specified with a different project than the pipeline project. For some jobs, temporary datasets will now be created in the correct project (Python) (<a href="https://github.com/apache/beam/issues/35813">#35813</a>).</li> <li>(Go) Fix duplicates due to reads after blind writes to Bag State (<a href="https://github.com/apache/beam/issues/35869">#35869</a>). <ul> <li>Earlier Go SDK versions can avoid the issue by not reading in the same call after a blind write.</li> </ul> </li> </ul> <h2 id="list-of-contributors">List of Contributors</h2> <p>According to git shortlog, the following people contributed to the 2.68.0 release. Thank you to all contributors!</p> <p>Ahmed Abualsaud, Andrew Crites, Ashok Devireddy, Chamikara Jayalath, Charles Nguyen, Danny McCormick, Davda James, Derrick Williams, Diego Hernandez, Dip Patel, Dustin Rhodes, Enrique Calderon, Hai Joey Tran, Jack McCluskey, Kenneth Knowles, Keshav, Khorbaladze A., LEEKYE, Lanny Boarts, Mattie Fu, Minbo Bae, Mohamed Awnallah, Naireen Hussain, Nathaniel Young, Radosław Stankiewicz, Razvan Culea, Robert Bradshaw, Robert Burke, Sam Whittle, Shehab, Shingo Furuyama, Shunping Huang, Steven van Rossum, Suvrat Acharya, Svetak Sundhar, Tarun Annapareddy, Tom Stepp, Valentyn Tymofieiev, Vitaly Terentyev, XQ Hu, Yi Hu, apanich, arnavarora2004, claudevdm, flpablo, kristynsmith, shreyakhajanchi</p>/blog/beam-2.68.0/Mon, 22 Sep 2025 15:00:00 -0500/blog/beam-2.68.0/blogrelease