apache/beam · error · IllegalStateException

Unable to create a side-input view from input

Error message

Unable to create a side-input view from input

What it means

View.asList() builds a PCollectionView that requires its input PCollection to be windowable/groupable (non-global windows that are unsupported, e.g. invalidWindowing or unsupported windowing/coder situations). Beam calls GroupByKey.applicableTo(input) as a pre-check and wraps any IllegalStateException from it into 'Unable to create a side-input view from input'.

Source

Thrown at sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/View.java:295

      return inMemory(true);
    }

    /**
     * Returns a PCollection view like this one, but whose resulting list will be entirely cached in
     * memory according to the input parameter.
     *
     * <p>This may use more memory in exchange for the fastest access when used repeatedly.
     */
    public AsList<T> inMemory(boolean inMemory) {
      return new AsList<>(withRandomAccess, inMemory);
    }

    @Override
    public PCollectionView<List<T>> expand(PCollection<T> input) {
      try {
        GroupByKey.applicableTo(input);
      } catch (IllegalStateException e) {
        throw new IllegalStateException("Unable to create a side-input view from input", e);
      }
      boolean explicitWithRandomAccess =
          withRandomAccess != null
              ? withRandomAccess
              : StreamingOptions.updateCompatibilityVersionLessThan(
                  input.getPipeline().getOptions(), "2.57.0");
      if (inMemory) {
        return expandInMemory(input);
      } else if (explicitWithRandomAccess
          || !(input.getWindowingStrategy().getWindowFn() instanceof GlobalWindows)) {
        return expandWithRandomAccess(input);
      } else {
        return expandWithoutRandomAccess(input);
      }
    }

    private PCollectionView<List<T>> expandInMemory(PCollection<T> input) {
      if (input.getWindowingStrategy().getWindowFn() instanceof GlobalWindows) {

View on GitHub (pinned to 12126d8942)

Solutions

  1. Ensure the input PCollection uses a windowing strategy compatible with GroupByKey (e.g. standard windowed or global window)
  2. Call Window.into(...) on the input PCollection before creating the view
  3. If the input comes from a source with non-standard windowing, re-window it before viewing

Example fix

// before
PCollectionView<List<T>> view = weirdWindowedPCollection.apply(View.asList());
// after
PCollectionView<List<T>> view = weirdWindowedPCollection
    .apply(Window.into(FixedWindows.of(Duration.standardMinutes(1))))
    .apply(View.asList());
Defensive patterns

Strategy: validation

Validate before calling

try { GroupByKey.applicableTo(input); } catch (IllegalStateException e) { /* re-window input first */ }

Try / catch

try { view = input.apply(View.asList()); } catch (IllegalStateException e) { throw new IllegalStateException("Re-window the input before creating side input", e); }

Prevention

When it happens

Trigger: Applying View.asList() (or asList-like view) to a PCollection whose windowing strategy is incompatible with GroupByKey — e.g. PCollection created from a source with non-standard windowing, or one where windowing is not supported (like certain side-input/GBK-invalid cases such as already-grouped or collapsing window kinds).

Common situations: Creating side inputs from PCollections with unsupported windowing strategies; using views on globalWindows after merging; constructing views from sources with invalid windowing (e.g. timestamps with invalid strategy); attempting side input from a PCollection with incompatible windowing/coder combos.

Understand the failure class

Background: "is not a compatible type" / "cannot merge" errors: when a value's type doesn't match what the library requires — this error's family across 65 libraries.

Related errors


AI-assisted analysis of apache/beam@12126d8942 (2026-09-13). Data as JSON: /api/errors/a52f4b7eb6264786. Report an issue: GitHub.