如何在一个微批处理中设置最大行数?

时间:2019-06-20 05:27:07

标签: apache-spark redis spark-structured-streaming

我正在通过以下代码使用火花结构化流foreachBatch从redis读取批记录(试图通过stream.read.batch.size设置batchSize)

val data = spark.readStream.format("redis")
  .option("stream.read.batch.size").load()

val query = data.writeStream.foreachBatch { 
  (batchDF: DataFrame, batchId: Long) => ...
  // we count size of batchDF here, we want to limit its size
  // some operation
}

当前,我们将stream.read.batch.size设置为128,但这似乎不起作用。 batchSize似乎是随机的,有时甚至超过1000甚至10000。

但是我不想等待那么长时间(10000条记录),因为我需要尽快完成一些操作(在代码注释// some operation中),以便控制最大批处理大小,以便当记录达到此限制时可以立即处理,该怎么办?

2 个答案:

答案 0 :(得分:3)

我是spark-redis的维护者。当前不支持此功能。 stream.read.batch.size参数控制单个Redis API调用(XREADGROUP调用的count参数)读取的项目数。它不会影响每个触发器的项目数(batchDF大小)。我已经在github上为该功能请求打开了一张票。

答案 1 :(得分:1)

  

我们要限制其大小

您可以将Dataset.limit用于流媒体限制(至少在Spark 2.4.3中可用)。

这样,代码可能如下所示:

val data = spark
  .readStream
  .format("redis")
  .load
  .limit(...your limit here...)