Skip to main content

Core Programming Model

Module Duration: 3-4 hours Focus: Fundamental Beam abstractions and transformations Prerequisites: Java or Python, basic data processing concepts

Overview

Apache Beam’s core programming model provides a unified abstraction for both batch and streaming data processing. This module covers the fundamental concepts that make Beam portable across different execution engines.

Key Concepts

  • PCollection: Immutable, distributed dataset
  • Pipeline: DAG of transformations
  • PTransform: Data transformation operation
  • ParDo: Parallel element-wise processing
  • DoFn: User-defined function for ParDo

Understanding PCollections

A PCollection (Parallel Collection) represents a distributed dataset that your Beam pipeline operates on. PCollections are immutable and can be bounded (batch) or unbounded (streaming).

PCollection Characteristics

Immutability: Once created, a PCollection cannot be modified. Transformations create new PCollections. Distributed: Elements are distributed across multiple workers for parallel processing. Timestamped: Each element has an associated timestamp (critical for streaming). Windowed: Elements are organized into windows for grouping operations.

Creating PCollections

PCollection Types

Bounded PCollection: Finite dataset with a known end (batch processing)
  • Reading from files
  • Database queries
  • Fixed in-memory collections
Unbounded PCollection: Infinite dataset that continues indefinitely (streaming)
  • Kafka topics
  • Pub/Sub subscriptions
  • Real-time sensor data

Pipeline Construction

A Pipeline represents the entire data processing workflow as a Directed Acyclic Graph (DAG) of transformations.

Pipeline Creation and Configuration

Pipeline Options


PTransforms: Data Transformations

PTransforms are operations that transform PCollections. They represent the nodes in your pipeline DAG.

Core Transform Types

Element-wise: Process each element independently (Map, FlatMap, Filter) Aggregating: Combine elements (GroupByKey, Combine, Count) Composite: Combine multiple transforms into reusable units

Map Transform

Apply a 1:1 function to each element.

FlatMap Transform

Apply a 1:N function (each input produces zero or more outputs).

Filter Transform

Keep only elements matching a predicate.

ParDo and DoFn

ParDo is the most fundamental and flexible transform in Beam. It allows you to implement custom processing logic through DoFn (Do Function).

Basic DoFn

DoFn Lifecycle Methods

DoFn provides lifecycle methods for setup and teardown operations.

Multiple Outputs (Side Outputs)

DoFn can emit elements to multiple output PCollections using tagged outputs.

Side Inputs

Side inputs allow you to use additional data alongside the main input in a ParDo.

Composite Transforms

Composite transforms encapsulate multiple transforms into reusable components.

Creating Composite Transforms


Aggregation Operations

Beam provides several built-in transforms for aggregating data.

GroupByKey

Groups elements by key. Requires input PCollection of key-value pairs.

Combine

Efficiently aggregates all values for each key using associative and commutative operations.

CoGroupByKey

Joins multiple PCollections with the same key type.

Real-World Use Cases

Log Processing Pipeline

ETL Pipeline


Best Practices

Performance Optimization

1. Minimize data serialization
2. Use Combine instead of GroupByKey when possible
3. Reuse expensive resources with setup/teardown

Testing


Summary

In this module, you learned:
  • PCollections as the fundamental data abstraction in Beam
  • How to construct and configure pipelines
  • Core transforms: Map, FlatMap, Filter, GroupByKey, Combine
  • ParDo and DoFn for custom processing logic
  • DoFn lifecycle methods and advanced features
  • Side outputs and side inputs
  • Creating reusable composite transforms
  • Best practices for performance and testing

Key Takeaways

  1. PCollections are immutable and distributed
  2. Transforms create new PCollections rather than modifying existing ones
  3. ParDo is the most flexible transform for custom logic
  4. Use Combine instead of GroupByKey for aggregations
  5. Leverage DoFn lifecycle methods for resource management
  6. Write testable code using composite transforms

Next Steps

Continue to the next module on Windowing & Time to learn how to process data based on temporal characteristics and handle late-arriving data in streaming pipelines.

Additional Resources