Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud dataflow 使用Apache-Beam对有界数据集进行滚动聚合_Google Cloud Dataflow_Apache Beam_Dataflow - Fatal编程技术网

Google cloud dataflow 使用Apache-Beam对有界数据集进行滚动聚合

Google cloud dataflow 使用Apache-Beam对有界数据集进行滚动聚合,google-cloud-dataflow,apache-beam,dataflow,Google Cloud Dataflow,Apache Beam,Dataflow,我有一个有界数据集(例如,在谷歌云存储中)。数据有两列,时间戳和温度,不适合内存。如何使用Beam计算碾压骨料(例如,300天的碾压平均温度)?我不确定使用窗口和侧边输入是否是有界数据集的最佳解决方案。我认为您需要的是长度为300天、周期为1天的滑动窗口。由于您要从GCS读取数据,并且时间戳在一列中,因此需要添加时间戳元数据,以便Beam知道元素是何时“生成”的,这样就可以完成了 这里有一个窗口长度为10天,周期为1天的示例(因此它没有那么大): 生成的输出应如下所示: [..] {'times

我有一个有界数据集(例如,在谷歌云存储中)。数据有两列,时间戳和温度,不适合内存。如何使用Beam计算碾压骨料(例如,300天的碾压平均温度)?我不确定使用窗口和侧边输入是否是有界数据集的最佳解决方案。

我认为您需要的是长度为300天、周期为1天的滑动窗口。由于您要从GCS读取数据,并且时间戳在一列中,因此需要添加时间戳元数据,以便Beam知道元素是何时“生成”的,这样就可以完成了

这里有一个窗口长度为10天,周期为1天的示例(因此它没有那么大):

生成的输出应如下所示:

[..]
{'timestamp': datetime.datetime(2020, 12, 10, 0, 0), 'avg_temperature_last_10days': 13.333333333333334}
{'timestamp': datetime.datetime(2020, 12, 9, 0, 0), 'avg_temperature_last_10days': 15.0}
{'timestamp': datetime.datetime(2020, 12, 8, 0, 0), 'avg_temperature_last_10days': 15.0}
[..]
{'timestamp': datetime.datetime(2020, 12, 27, 0, 0), 'avg_temperature_last_10days': 12.5}
{'timestamp': datetime.datetime(2020, 12, 26, 0, 0), 'avg_temperature_last_10days': 20.0}
{'timestamp': datetime.datetime(2020, 12, 25, 0, 0), 'avg_temperature_last_10days': 20.0}
{'timestamp': datetime.datetime(2020, 12, 24, 0, 0), 'avg_temperature_last_10days': 20.0}
{'timestamp': datetime.datetime(2020, 12, 23, 0, 0), 'avg_temperature_last_10days': 20.0}
{'timestamp': datetime.datetime(2021, 1, 5, 0, 0), 'avg_temperature_last_10days': 17.5}
{'timestamp': datetime.datetime(2021, 1, 4, 0, 0), 'avg_temperature_last_10days': 17.5}
[..]

你检查过滑动窗了吗?它看起来是300天的长度,1天的周期可以工作。如果数据在同一天内以不规则的间隔有多条记录,会发生什么情况?使用小于1天的周期?小多少?正如问题中提到的,我不确定使用滑动窗口是否是最普遍的解决方案。windows所做的是根据时间戳对PCollection进行切片。对于长度为10和1天的滑动窗口,一个窗口将覆盖第1天至第11天,另一个窗口覆盖第2天至第12天,另一个窗口覆盖第3天至第13天,依此类推。如果第1天有两个元素,它们将落在同一个窗口中。请注意,在进行平均值计算时,具有相同窗口的所有元素的权重都是相同的,如果您不希望这样,可以先应用1天的固定窗口,然后应用滑动窗口。看来你有什么特别的想法,请用一个例子更新Q,我会修改代码如果你添加一个例子输入和输出,我会修改答案,或多或少地匹配。我不确定我是否理解你提到的edge案例
[..]
{'timestamp': datetime.datetime(2020, 12, 10, 0, 0), 'avg_temperature_last_10days': 13.333333333333334}
{'timestamp': datetime.datetime(2020, 12, 9, 0, 0), 'avg_temperature_last_10days': 15.0}
{'timestamp': datetime.datetime(2020, 12, 8, 0, 0), 'avg_temperature_last_10days': 15.0}
[..]
{'timestamp': datetime.datetime(2020, 12, 27, 0, 0), 'avg_temperature_last_10days': 12.5}
{'timestamp': datetime.datetime(2020, 12, 26, 0, 0), 'avg_temperature_last_10days': 20.0}
{'timestamp': datetime.datetime(2020, 12, 25, 0, 0), 'avg_temperature_last_10days': 20.0}
{'timestamp': datetime.datetime(2020, 12, 24, 0, 0), 'avg_temperature_last_10days': 20.0}
{'timestamp': datetime.datetime(2020, 12, 23, 0, 0), 'avg_temperature_last_10days': 20.0}
{'timestamp': datetime.datetime(2021, 1, 5, 0, 0), 'avg_temperature_last_10days': 17.5}
{'timestamp': datetime.datetime(2021, 1, 4, 0, 0), 'avg_temperature_last_10days': 17.5}
[..]