我们有一些数据(数百万)在蜂箱表中,每天都有。第二天,一旦熬夜摄入完成,不同的应用程序就会查询我们的数据(使用sql)。
我们使用这个sql并调用spark。
spark.sqlContext.sql(statement) // hive-metastore integration is enabled这导致火花驱动程序占用过多内存,我们是否可以使用火花流(或结构化流)以管道方式流,而不是收集驱动程序上的所有内容,然后发送给客户端?
我们不想(在典型的流应用程序中)立即发送数据,而是希望在客户要求(拉)数据时向客户发送流数据。
发布于 2020-07-12 14:24:21
IIUC。
streamingDF.writeStream.foreachBatch { (batchDF: DataFrame, batchId: Long),为Spark提供了一个非常好的功能,可以以微批处理方式编写流处理输出Sink。资料来源:
结构化流查询是使用微批处理引擎处理的,该引擎将数据流作为一系列小批处理作业处理,从而实现端到端延迟低至100毫秒,且只需一次容错保证。
ForeachBatch
foreachBatch(.)允许您指定对流查询的每个微批处理的输出数据执行的函数。从Spark2.4开始,Scala、Java和Python都支持这一点。它包含两个参数: DataFrame或Dataset,它具有微批处理的输出数据和微批处理的唯一ID。
https://stackoverflow.com/questions/62861662
复制相似问题