Spark Structured Streaming¶
Примеры3B · Общие setup/версии · Фактические проверки (архив рабочего проекта)
Тип материала: учебное практическое упражнение. Выполненные и непроверенные шаги указаны отдельно.
Команды выполняются из examples/processing после общего setup; $labPython — interpreter venv. Runtime и documented expected result различаются.
Зависимости и версии¶
PySpark4.0.1, Python3.12, полный JDK17/21; streaming.py, Dockerfile. Локальный Windows runtime имеет известный NativeIO blocker.
Команды запуска¶
& $labPython prepare_inputs.py
& $labPython spark/streaming.py --input spark/input --checkpoint output/spark/checkpoint-v1 --output output/spark/result-v1 --generation demo-v1
# Альтернатива в Linux container, когда Docker daemon доступен:
docker compose -f compose-runtimes.yaml --profile spark run --build --rm spark
Тестовые данные¶
Prepared unique4 JSON facts; raw duplicate убран bounded preparation protocol, не magic Spark stream dedup. Один availableNow file-source query с event-time window10s.
Ожидаемый результат¶
После успешного runtime ожидается snapshot.json с двумя rows: t7/EUR window[0,10)=275,t8/EUR[10,20)=50. Metadata содержит generation,batch_id. Local os.replace заменяет full snapshot, не добавляет batch повторно. Это bounded fixture, COMPLETE mode не ограничивает aggregate state для бесконечного потока.
Ограничения и статус проверки¶
Фактический Windows attempt FAILED_RUNTIME_ATTEMPT: inherited Android JBR lacked vector module; полный JDK исправил JVM startup, затем NativeIO$Windows.access0 unavailable. Успешный micro-batch/checkpoint не заявлен. Linux Dockerfile не был собран/запущен. One writer per checkpoint/output; не S3 atomic publication и не external EOS.
Полный журнал ограничений (архив рабочего проекта) хранит NOT_RUN и failed runtime attempts; их нельзя считать выполненными integration tests.