Arbitrary Stateful Processing in Apache Spark’s Structured Streaming - The Databricks Blog