gpt4 book ai didi

hadoop - 如何正确使用 couchdb 链接 mapreduce 函数或正确分组

转载 作者:可可西里 更新时间:2023-11-01 16:57:14 26 4
gpt4 key购买 nike

我想减少我拥有的数据量并在返回之前对其进行预处理以仅填充计算数据。作为一个简单的示例,我有以下一系列数据,以小时为单位表示给定时间的值:分钟

var testdata = [ //
{_id: '01', timestamp: [01, 10], value: 100},
{_id: '02', timestamp: [01, 20], value: 101},
{_id: '03', timestamp: [01, 30], value: 102},
{_id: '04', timestamp: [02, 10], value: 103},
{_id: '05', timestamp: [02, 20], value: 104},
{_id: '06', timestamp: [02, 30], value: 105},
{_id: '07', timestamp: [03, 10], value: 106},
{_id: '08', timestamp: [03, 20], value: 107},
{_id: '09', timestamp: [03, 30], value: 108},
{_id: '10', timestamp: [03, 40], value: 109},
{_id: '11', timestamp: [04, 10], value: 110},
{_id: '12', timestamp: [04, 20], value: 111}
];

所以在最低的分组上,我想得到值的细节,意思是:

key: 01 value: 100; // 100 - 0 = 100
key: 02 value: 1; // 101-100=1
key: 03 value: 1; // 102-101=1
key: 04 value: 1; // 103-102=1
key: 05 value: 1; // 104-103=1
key: 06 value: 1; //...
key: 07 value: 1; //...
key: 08 value: 1; //...
key: 09 value: 1; //...
key: 10 value: 1; //...
key: 11 value: 1; //...
key: 12 value: 1; //...

我已经不知道如何在 couchdb 中实现这一点。由于没有更深层次的数据级联,因此没有任何内容可以分组,因此也没有“减少”。

下一步是按小时分组,也就是说,汇总之前的结果

key: 01 value: 102; // 100+1+1=102
key: 02 value: 3; // 1+1+1=3
key: 03 value: 4; // 1+1+1+1=4
key: 04 value: 2; // 1+1=2

最后一整天的结果会是

key : 01, value: 111;

所以我的问题是,是否真的可以在 couchdb 中执行此类任务,或者我应该简单地返回绝对值并在客户端执行计算以显示图表?

最佳答案

我不确定使用 reduce 是不可能的,但至少看起来很难。

事实上,您可以在不使用 reduce 的情况下完成——使用 _list 函数代替。与 reduce 不同,list fns 以准确的顺序接收整个 View 结果——因此您始终知道数据 block 从哪里开始以及它有多长。

另一个好处是您可以在一个 API 请求中执行所有折叠循环并将所有折叠作为单个对象发送——与 map/reduce 不同,_list fns 可以发送任何结构(以及任何 mime )。

参见 http://docs.couchdb.org/en/latest/api/ddoc/render.html#db-design-design-doc-list-list-name-view-name获取更多信息。

关于hadoop - 如何正确使用 couchdb 链接 mapreduce 函数或正确分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28417390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com