Apache Spark Streaming:按键窗口化PairDStream的中位数

时间:2015-09-04 11:51:45

标签: apache-spark spark-streaming

我想计算每个键值的PairDStream的中值。

我已经尝试了以下内容,效率非常低:

{{1}}

有人可以帮我提高交易效率吗?我有大约1950个不同的密钥,每个密钥可以达到3600(每秒1个数据点,1个小时的窗口)值,在哪里可以找到中位数。

谢谢!

2 个答案:

答案 0 :(得分:0)

首先,我不知道你为什么要使用Spark来完成这项任务。考虑到你只有几千个值,它似乎与大数据无关。它可能会使事情变得更复杂。但是,我们假设您计划扩展到更大的数据集。

我会尝试使用一些更优化的算法来查找中值而不仅仅是排序值。对值数组进行排序在 O(n * log n)时间内运行。

你可以考虑使用像Median of medians

这样的线性时间中值算法

答案 1 :(得分:0)

1)避免使用groupbykey; reducebykey比groupbykey更有效。 2)reduceByKeyAndWindow(Function2,windowduration,slideDuration)可以更好地为你服务。

例如: JavaPairDStream merged = yourRDD.reduceByKeyAndWindow(new Function2(){             public String call(String arg0,String arg1)throws Exception {                 return arg0 +“,”+ arg1;             }         },Durations.seconds(windowDur),Durations.seconds(slideDur));

假设此RDD的输出将如下所示: (键,1,2,3,4,5,6,7) (键,1,2,3,4,5,6,7)。 现在对于每个键,你可以解析这个,你将拥有值的数量, 所以:1 + 2 + 3 + 4 + 5 + 6 + 7 /计数

注意:我使用字符串来连接。

我希望它有所帮助:)