从kafka数据帧获取最大,最小偏移量

时间:2019-02-18 13:04:44

标签: apache-spark apache-kafka kafka-consumer-api

下面是我从卡夫卡读取数据的方式。

 val inputDf = spark.readStream
 .format("kafka")
 .option("kafka.bootstrap.servers", brokers)
 .option("subscribe", topic)
 .option("startingOffsets", """{"topic1":{"1":-1}}""")
 .load()

 val df = inputDf.selectExpr("CAST(value AS STRING)","CAST(topic AS STRING)","CAST (partition AS INT)","CAST (offset AS INT)","CAST (timestamp AS STRING)")

如何从上述数据框中获取最大和最小偏移量和时间戳?我想将其保存到某个外部源以供将来参考。我无法使用“ agg”功能,因为我正在将相同的数据帧写入writestream(如下所示)

 val kafkaOutput = df.writeStream
  .outputMode("append")
  .option("path", "/warehouse/download/data1")
  .format("console")
  .option("checkpointLocation", checkpoint_loc)
  .start()
  .awaitTermination() 

1 个答案:

答案 0 :(得分:0)

如果您可以将Spark版本升级到2.4.0,则可以解决此问题。

在Spark 2.4.0中,您具有spark foreachbatch api,通过它可以将同一DataFrame写入多个接收器。

Spark.writestream.foreachbatch(((batchDF,batchId)=> some_fun(batchDF))。start()

some_fun(batchDF):{保持DF并执行聚合}