pyspark流媒体应用程序来计算移动平均线

时间:2017-12-13 04:55:43

标签: python pyspark spark-streaming

我的数据流包含时间戳和与之对应的值

$results = $this->get_events_for_export();

$month_isset = [];
foreach ($results as $result) {

    $date = strtotime($result['event_date']);
    $month_group = date('M', $date);
    $year_group = date('Y', $date);
    if (!isset($month_isset[$year_group][$month_group]))
    {
        $month_isset[$year_group][$month_group] = [];
    }
    else
    {
        $month_group = '';
    }

    $section->addText($month_group ."\t". date('d', $date) ."\t". date('D', $date) ."\t". htmlentities($result['event_title']), null, $event_lists);

}

我需要采用10个元素的移动平均线。我一直在探索带有函数的foreachRDD选项,但在浏览spark文档后却没有成功,但找不到任何明确的指针。

1 个答案:

答案 0 :(得分:0)

假设您的数据位于元组D的{​​{1}}列表中。 10个元素的移动平均值(与时间戳无关)就是这个,使用numpy命令mean():

(time,value)

此函数将返回一个列表import numpy as np def mov_avg(D): avg_list = [] Dval = [item[1] for item in D] #extracts the values from D, ignoring time stamp L = len(D) for i in range(L): if i<10: l = Dval[:i+1] M = np.mean(l) avg_list.append(M) else: l = Dval[i-9:i+1] M = np.mean(l) avg_list.append(M) return avg_list avg_list是数据avg_list[j]的10个值的平均值,包括D值。因此,如果我们设置j+1,那么A = mov_avg(D)将是A[12]的值3到12(这是10个元素,如果我们包含3和12)的平均值,而D将是A[6]的0到6的平均值。

可能有一个预先存在的命令,但是这就是你编码的方式。