如何在Elasticsearch中计算“明显平均值”?我有一些这样的非规范化数据:
{ "record_id" : "100", "cost" : 42 }
{ "record_id" : "200", "cost" : 67 }
{ "record_id" : "200", "cost" : 67 }
{ "record_id" : "200", "cost" : 67 }
{ "record_id" : "400", "cost" : 11 }
{ "record_id" : "400", "cost" : 11 }
{ "record_id" : "500", "cost" : 10 }
{ "record_id" : "600", "cost" : 99 }
请注意,对于给定的“ record_id”,“成本”如何始终相同。
因此,根据以上数据:
如何获得“费用”字段的平均值但由“ record_id”区分的平均值?结果将是(42 + 67 + 11 + 10 + 99)/5=45.8
如何获得“费用”字段的SUM值,但如何通过“ record_id”显示DISTINCT?结果将是42 + 67 + 11 + 10 + 99 = 229
它不适用于terms
aggs。这是使用无痛脚本的可能方式:
编制索引-您的实际映射可能与生成的默认映射不同(尤其是上的.keyword
部分rec_id
):
POST _bulk
{"index":{"_index":"uniques","_type":"_doc"}}
{"record_id":"100","cost":42}
{"index":{"_index":"uniques","_type":"_doc"}}
{"record_id":"200","cost":67}
{"index":{"_index":"uniques","_type":"_doc"}}
{"record_id":"200","cost":67}
{"index":{"_index":"uniques","_type":"_doc"}}
{"record_id":"200","cost":67}
{"index":{"_index":"uniques","_type":"_doc"}}
{"record_id":"400","cost":11}
{"index":{"_index":"uniques","_type":"_doc"}}
{"record_id":"400","cost":11}
{"index":{"_index":"uniques","_type":"_doc"}}
{"record_id":"500","cost":10}
{"index":{"_index":"uniques","_type":"_doc"}}
{"record_id":"600","cost":99}
然后汇总
GET uniques/_search
{
"size": 0,
"aggs": {
"terms": {
"scripted_metric": {
"init_script": "state.id_map = [:]; state.sum = 0.0; state.elem_count = 0.0;",
"map_script": """
def id = doc['record_id.keyword'].value;
if (!state.id_map.containsKey(id)) {
state.id_map[id] = true;
state.elem_count++;
state.sum += doc['cost'].value;
}
""",
"combine_script": """
def sum = state.sum;
def avg = sum / state.elem_count;
def stats = [:];
stats.sum = sum;
stats.avg = avg;
return stats
""",
"reduce_script": "return states"
}
}
}
}
并屈服
...
"aggregations" : {
"terms" : {
"value" : [
{
"avg" : 45.8,
"sum" : 229.0
}
]
}
}
问题内容: 我在添加数组的所有元素以及将它们取平均值时遇到了问题。我该怎么做,并用我现在拥有的代码实现它?这些元素应该定义如下。 问题答案: var sum = 0; for( var i = 0; i < elmt.length; i++ ){ sum += parseInt( elmt[i], 10 ); //don’t forget to add the base } 只需遍历数组,因为您的
我在添加数组的所有元素以及求取它们的平均值时遇到了问题。我将如何做到这一点并用我当前拥有的代码实现它?这些元素应该定义如下。
我需要写一个程序来计算用户输入的整数的奇偶平均数。用户键入“完成”以完成。输出将显示奇数的平均值和偶数的平均值。 我有一个while循环程序,可以计算数字的和,我正试图增加奇数和偶数和的额外要求。这是代码: 下面是我修改的代码,对奇数和偶数进行排序,然后对每组进行平均。 预期: 实际:
Flink(批处理/流式处理)中是否有方法同时计算字段的平均值和总和?使用聚合方法,我可以计算groupBy结果中字段的和,但如何同时计算平均值呢?下面的示例代码。
问题内容: 我正在尝试从数据集中返回总计/平均值行,其中包含某些字段的SUM和其他字段的AVG。 我可以通过以下方式在SQL中执行此操作: 我将其转换为SQLAlchemy的尝试如下: 但这是错误的: 问题答案: 您应该使用类似: 您不能在这里使用,因为SqlAlchemy试图找到一个将函数结果放入的字段,但是它失败了。
问题内容: Y1961 Y1962 Y1963 Y1964 Y1965 Region 0 82.567307 83.104757 83.183700 83.030338 82.831958 US 1 2.699372 2.610110 2.587919 2.696451 2.846247 US 2 14.131355 13.690028 13.599516 13.649176 13.649046