【问题标题】:Is it possible to use group aggregation in invoke lamda function?是否可以在调用 lambda 函数中使用组聚合?
【发布时间】:2019-09-06 04:37:29
【问题描述】:

我创建了三个 lambda 函数 1).postData 2).like 3).comment。我正在使用调用 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”,comment - “to” 字段值是唯一的。基于这个唯一值,我可以对输出进行分组吗?意味着我需要 _id 来提交相同的值,这些值将显示在一个数组中。有可能吗?

提前致谢。

【问题讨论】:

    标签: python aws-lambda


    【解决方案1】:

    这里有两个选择。

    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。

    见:

    【讨论】:

    • 我关心的是,如何在上面的代码中应用组聚合。是否有可能,因为这是调用 lambda 函数。我不明白上面的解决方案。
    • 你好,如果你有时间,你能回答下面的问题stackoverflow.com/questions/57996739/…提前谢谢
    猜你喜欢
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多