是否可以在调用lamda函数中使用组聚合?

时间:2019-09-05 15:13:50

标签: python aws-lambda

我创建了三个lambda函数1).postData 2).like 3).comment。我正在使用invoke lambda函数来组合三个输出。找到以下代码供您参考。

lambdas = boto3.client("lambda")

def lambda_handler(event, context):

print("Received event: " + json.dumps(event, indent=1))

response1 = lambdas.invoke(FunctionName="postdata", 
InvocationType="RequestResponse", Payload=json.dumps(event, 
default=json_util.default));

response2 = lambdas.invoke(FunctionName="like", 
InvocationType="RequestResponse", Payload=json.dumps(event, 
default=json_util.default));

response3 = lambdas.invoke(FunctionName="comment", 
InvocationType="RequestResponse", Payload=json.dumps(event, 
default=json_util.default));

result1 = json.loads(response1.get('Payload').read())
result2 = json.loads(response2.get('Payload').read())
result3 = json.loads(response3.get('Payload').read())

return result1+result2+result3

在这里,我在一个数组中得到了三个lambda函数。在三个lambda函数中,我们有一个唯一的ID,但有三个不同的文件名,如下所示。

[

{

  "_id": {
    "$oid": "5d6fbc4256cfe9fcfd8c4136"
  },
  "location": null,
  "media_type": "jpg",
},
{
  "_id": {
    "$oid": "5d5dd01d93ab7d1ed7e2ff31"
  },
  "location": null,
  "media_type": "jpg",

},

{

 "from": {
    "$oid": "5d5dcccf9cf5ce000183d15e"
  },
  "to": {
    "$oid": "5d5dd01d93ab7d1ed7e2ff31"
  },
  "interaction_type": "feelings",
},
{
 "from": {
    "$oid": "5d5dcccf9cf5ce000183d15e"
  },
  "to": {
    "$oid": "5d6fbc4256cfe9fcfd8c4136"
  },
  "interaction_type": "feelings",

},

{

  "from": {
    "$oid": "5d5dcccf9cf5ce000183d15e"
  },
  "to": {
    "$oid": "5d5dd01d93ab7d1ed7e2ff31"
  },
  "interaction_data": "nice car.....",
},
{
  "from": {
    "$oid": "5d5dcccf9cf5ce000183d15e"
  },
  "to": {
    "$oid": "5d5dd01d93ab7d1ed7e2ff31"
  },
  "interaction_data": "awesome car.....",
},
{
  "from": {
    "$oid": "5d5dcccf9cf5ce000183d15e"
  },
  "to": {
    "$oid": "5d6fbc4256cfe9fcfd8c4136"
  },
  "interaction_data": "Hello world....",

}

]

我用粗体大括号getpost对输出进行了划分,例如注释输出。 我关心的是getpost-“ _ id”,例如-“ to”,注释-“ to”字段值是唯一的。基于此唯一值,我可以对输出进行分组。意味着我需要_id来提交相同的值,这些值将显示在一个数组中。有可能吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您在这里有两个选择。

  1. 创建一个可以运行所有三个查询的lambda,然后在其中进行汇总(下面的mongo分组示例)。

  2. 如果尚未解析JSON响应对象,则对其进行解析,然后手动进行汇总。

显然,#1的性能更高,并且更优雅。

Mongo聚合/组函数示例:

db.sales.aggregate(
   [
      {
        $group : {
           _id : { month: { $month: "$date" }, day: { $dayOfMonth: "$date" }, year: { $year: "$date" } },
           totalPrice: { $sum: { $multiply: [ "$price", "$quantity" ] } },
           averageQuantity: { $avg: "$quantity" },
           count: { $sum: 1 }
        }
      }
   ]
)

如果您决定在lambda中使用mongo分组路线,请记住它在计算时会在内存存储中使用。如果您的数据集很大,则会给您一个错误。如果遇到此问题,请按照文档建议将allowDiskUse设置为true。

请参阅: