2017-03-09 59 views
0

我有一个Apache Spark的案例,我喜欢分析sensorstreams。流存在来自各种传感器的sensordata,但都推送相同类型的数据。比较dstream的记录

从这个流我想知道每个传感器多久特定值低于一定的阈值。传感器每隔x秒提交一次记录,其中包含:时间戳和值。我喜欢提取传感器低于该值的时间间隔,以获取持续时间,间隔开始时间,间隔结束时间和平均值。 我不确定从所有连接的传感器中提取每个间隔的持续时间,开始时间和结束时间的正确方法('Sparkish')。

我目前使用的方法是一个foreach循环,其中包含一些状态变量,用于唯一地标记每条记录,如果它是来自特定传感器的区间的一部分。当记录已标记时,使用map-reduce方法提取所需的信息。但我对foreach循环感到不舒服,因为它不适合map-reduce方法,因此在工作人员之间分配工作时不能很好地扩展。 更笼统地说,我面临着比较rdd中的单个记录和来自不同dstream的记录的挑战。

任何人都认可这样一个(微不足道的)案例,并且知道一个更好/更优雅的方法来解决这个问题。

回答

0

我发现最好的方法是使用mapWithState()。这个函数提供了一种优雅而灵活的方式来保持连续dstream中的值不变。