Java 使用Spark检测大型数据集中重复的连续值
干杯 最近我一直在尝试Spark,到目前为止,我已经观察到了非常有趣的结果,但目前我一直被著名的Java 使用Spark检测大型数据集中重复的连续值,java,apache-spark,reduce,Java,Apache Spark,Reduce,干杯 最近我一直在尝试Spark,到目前为止,我已经观察到了非常有趣的结果,但目前我一直被著名的groupByKeyOOM问题所困扰。基本上,这项工作是在大型数据集中搜索测量值连续增加至少N倍的周期。通过将结果写入磁盘,我成功地解决了这个问题,但是应用程序现在运行得慢多了(这是由于磁盘IO的缘故)。现在的问题是:是否有其他内存有效的策略,我可以运行排序数据并检查相邻值(对于同一个键)是否在至少N个连续观察中增加,而无需重复使用groupByKey方法 我设计了一个算法来使用reduceByKey
groupByKey
OOM问题所困扰。基本上,这项工作是在大型数据集中搜索测量值连续增加至少N倍的周期。通过将结果写入磁盘,我成功地解决了这个问题,但是应用程序现在运行得慢多了(这是由于磁盘IO的缘故)。现在的问题是:是否有其他内存有效的策略,我可以运行排序数据并检查相邻值(对于同一个键)是否在至少N个连续观察中增加,而无需重复使用groupByKey方法
我设计了一个算法来使用reduceByKey
,但有一个问题,reduce似乎忽略了数据排序,并在最后大喊完全错误的结果
非常感谢您的建议。有几种方法可以解决此问题:
:使用自定义分区器和排序重新分区和SortWithinPartitions
(名称、时间戳)对keyBy
- 创建只考虑名称的自定义分区器
使用自定义分区器重新分区和SortWithinPartitions
- 使用
迭代数据并生成匹配序列mapPartitions
-这与第一个解决方案类似,但以额外的后处理为代价提供了更高的粒度sortBy(Key)
(名称、时间戳)对keyBy
sortByKey
- 使用
处理单个分区,跟踪每个分区的前导/尾随模式mapPartitionsWithIndex
- 调整最终结果以包括跨越多个分区的模式
- 使用
mllib.rdd.rdd函数中的
滑动
,在排序数据上创建固定大小的窗口
排序(名称、时间戳)
- 创建包含多个
名称的滑动RDD和筛选窗口
- 检查是否有任何窗口包含所需的图案