从结构化流中的数据集访问所有记录作为列表

时间:2017-09-24 06:08:47

标签: java apache-kafka apache-spark-dataset apache-spark-2.0 spark-structured-streaming

我是Spark / Structured Stream的新手。该应用程序是一个批处理作业,将每天启动一次,并应该读取该时间点上Kafka主题上可用的所有消息,对消息进行处理并写入文本文件。

我有以下代码从Topic读取并将内容转储到文本文件。

Dataset dataset = sparkSession.readStream()
        .format("kafka")
        .option("kafka.bootstrap.servers", "localhost:9092")
        .option("subscribe", "TestTopic")
        .option("startingOffsets", "earliest")
        .load();

dataset = dataset.select(from_json(col("value").cast(DataTypes.StringType),schema).as("record")).selectExpr("record" + ".*");

StreamingQuery streamingQuery = dataset.writeStream()
        .format("csv")
        .option("sep", "#")
        .option("header", "true")
        .option("checkpointLocation", "path/to/checkpoint/dir")
        .start("/output");

streamingQuery.processAllAvailable();

应用程序已经将所有处理/丰富/业务验证/逻辑作为Spring组件,并且那些组件需要List< Bean>。

问题:

  1. 我可以在转换中使用Spring组件吗?怎么样?

  2. 有没有办法一次访问所有记录,以便我可以创建一个List并将其传递给Spring组件。 map / ForeachWriter一次可以访问一条记录。

  3. 某些Spring组件访问休息服务,如果这些服务关闭,我想终止结构化流,而不是将偏移提交给Kafka,这样当服务可用时,流媒体作业可以再次启动

0 个答案:

没有答案