我正在通过以下代码使用火花结构化流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
中),以便控制最大批处理大小,以便当记录达到此限制时可以立即处理,该怎么办?
答案 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...)