Cheerz,
最近我正在尝试Spark并且做得很远我观察到了非常有趣的结果,但是目前我遇到了着名的groupByKey
OOM问题。基本上它的工作是尝试在大数据集中搜索测量值连续增加至少N次的时段。我设法通过将结果写入磁盘来解决问题,但是应用程序现在运行得慢得多(由于磁盘IO,这是预期的)。现在的问题是:是否有任何其他内存有效的策略,我可以运行排序数据并检查相邻值(对于相同的键)是否在至少N次连续观察中增加,而不再重复使用groupByKey方法?
我设计了一个用reduceByKey
来做的算法,但是有一个问题,reduce似乎忽略了数据排序,并在最后大喊完全错误的结果。
任何想法都表示赞赏,谢谢。
答案 0 :(得分:2)
有几种方法可以解决这个问题:
repartitionAndSortWithinPartitions
使用自定义分区和排序:
keyBy
(姓名,时间戳)对repartitionAndSortWithinPartitions
使用自定义分区程序mapPartitions
迭代数据并生成匹配序列 sortBy(Key)
- 这与第一个解决方案类似,但以额外的后处理为代价提供更高的粒度。
keyBy
(姓名,时间戳)对sortByKey
mapPartitionsWithIndex
处理各个分区,跟踪每个分区的前导/尾随模式使用sliding
中的mllib.rdd.RDDFunctions
在已排序数据上创建固定大小的窗口。
sortBy
(姓名,时间戳)names