apache-spark-sql - mapWithState 中的 stateSnapshots 按需
问题描述
我正在从 Kafka 流式传输数据(批处理间隔 10 秒),将 RDD 转换为 PairRDD,然后使用 mapWithState() 将 RDD 存储到状态中。下面是代码:
JavaPairDStream<String, Object> transformedStream = stream
.mapToPair(record -> new Tuple2<>(record.getKey(), record))
.mapWithState(StateSpec.function(updateDataFuncGDM).numPartitions(32)).stateSnapshots();
transformedStream.foreachRDD(rdd -> {
//if flag is true, put the RDD to a SQL table, and run a query to do some aggregations liek sum, avg etc
// if flag is false, return;
}
现在,我不断更新状态中的数据,并且在某个事件中,我将标志更改为 true,并将这些数据放入表中,然后进行计算。
这里的问题是,由于我在每批中都获得“stateSnapshots”,因此效率不高,并且 mapWithState 将大量数据保存在内存中,并且随着状态的增长,它会变得更糟。此外,由于 mapWithState 每 10 次迭代后检查点数据,因此需要大量时间,因为数据非常大。
我只想按需获取状态的 stateSnapshot(即仅在标志为真时 foreachRDD 的迭代中)但我没有找到很多方法来处理状态
解决方案
推荐阅读
- python - 帧大小问题 cv2.videocapture
- python - 无法使用 Selenium 包提取属性
- python - 将年份和月份的 Stacked DataFrame 转换为具有日期时间索引的 DataFrame
- python-3.x - 从嵌套字典创建数据框
- excel - 在文件夹中搜索与 Excel 范围内不同字符串匹配的文件
- sql-server - 交叉加入事实和维度
- python - 在 python 中查找幻数
- linux - 脚本:检测操作系统是 x32 还是 x64 位并下载最新的 Oracle Java JDK 8
- mongodb - { useUnifiedTopology: true } Pass 已弃用
- r - 美国各州 shapefile 的 R geom_point vs geom_line vs geom_path