Среднее значение Spark sql становится нулевым для первого триггера - PullRequest
0 голосов
/ 27 августа 2018

Почему для первого триггера "среднее" значение потоковой передачи 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();
    }
...