Почему для первого триггера "среднее" значение потоковой передачи sql равняется нулю?
- Пробовал как с обновлением, так и с полным режимом
- Результат один и тот же, независимо от того, присутствуют данные или нет в последнем смещении kafka
- Только счетчик равен 0, тогда как все остальные функции агрегации дают ноль
- Я не хочу, чтобы решение обрабатывало
dataset.first()
для нулевых значений
Наблюдаемая точка - искровая структурированная потоковая передача, запускающая первую партию с пустыми данными, из-за чего агрегированные значения становятся равными нулю. Почему это происходит?
Ниже приведен пример кода Java:
public static void main(String[] args) throws Exception {
SparkSession spark = SparkSession.builder().appName("TestAggNull").config("spark.master", "local[2]")
.config("spark.driver.bindAddress", "127.0.0.1")
.config("spark.sql.shuffle.partitions", 1).getOrCreate();
Dataset<Row> ds = spark.readStream()
.format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092")
.option("subscribe", "sampleTopic")
.load().selectExpr("CAST(value AS STRING)");
ds = ds.select(functions.avg(functions.col("value")));
ds.writeStream()
.format("console")
.outputMode("update").start();
spark.streams().awaitAnyTermination();
}