Если бегун, который вы используете, поддерживает слияние, и вы применяете фильтры непосредственно друг за другом без комбайнера / GBK, тогда ваш код будет выполнен в рамках одного слитого шага.
Из документации Javadocs Beam SDK:
Оптимизация
Балочные бегуны могут применить оптимизацию к конвейеру, прежде чем он будет выполнен. Ключевая оптимизация, слияние, относится к операциям ParDo. Если одна операция ParDo создает коллекцию PCollection, которая затем используется в качестве основного ввода для другой операции ParDo, две операции ParDo будут объединены в одну операцию ParDo и выполняются за один проход; это «слияние производителя и потребителя».
Я бы порекомендовал использовать более чистый код и позволить раннеру оптимизировать выполнение.