gpt4 book ai didi

python - Python 中的 DynamoDB 查询(使用 GroupBy 进行计数)

转载 作者:行者123 更新时间:2023-12-01 03:22:38 24 4
gpt4 key购买 nike

这可能是微不足道的,但我加载了一个本地 DynamoDB 实例,其中包含我聚合的 30GB 的 Twitter 数据。

主键是 id(来自 Tweet JSON 的tweet_id),我还存储日期/文本/用户名/地理代码。

我基本上对提到的两个主题感兴趣(比如说“蜜蜂”和“酒”)。 我想按天对每个州进行计数。

所以到最后,我应该知道每个州在某一天被提及的次数。我想最好将其导出为 CSV 或其他格式以供以后分析。

我在执行此操作时遇到的一些问题...

首先,地理编码信息是[纬度,经度]的元组,因此对于每个条目,我需要将其映射到一个州。我能做到的。

其次,最有效的方法是遍历每个条目并手动检查它是否包含任一关键字的提及,然后为每个条目建立一个映射日期/位置/计数的字典?

编辑:

由于我花了 20 个小时才将所有数据加载到表中,因此我不想删除并重新创建它。也许我应该创建一个全局二级索引(?)并使用它来搜索查询中的其他字段?这样我就不必扫描所有内容。这是正确的道路吗?

编辑2:

好吧,由于该表位于我的本地计算机上,我应该可以只使用像扫描这样昂贵的操作,对吗?

所以如果我做了这样的事情:

query = table.scan(
FilterExpression=Attr('text').contains("Booze"),
ProjectionExpression='id, text, date, geo',
Limit=100)

对每个关键字进行一次扫描,然后我就可以浏览生成的过滤列表并获取给定日期每个州每个主题的提及次数,对吧?

编辑3:

response = table.scan(
FilterExpression=Attr('text').contains("Booze"),
Limit=100)
//do something with this set
while 'LastEvaluatedKey' in response:
response = table.scan(
FilterExpression=Attr('text').contains("Booze"),
Limit=100,
ExclusiveStartKey=response['LastEvaluatedKey']
)
//do something with each batch of 100 entries

对于这两个关键字来说都是类似的。这样我就能够浏览生成的过滤集并执行我想要的操作(在本例中,找出位置和日期并使用该信息创建最终数据集)。对吗?

编辑4

如果我添加:

ProjectionExpression='date, location, user, text' 

在扫描请求中,我收到一条错误消息“botocore.exceptions.ClientError:调用扫描操作时发生错误 (ValidationException):无效的 ProjectionExpression:属性名称是保留关键字;保留关键字:位置”。我该如何解决这个问题?

NVM 我明白了。答案是查看 ExpressionAttributeNames(请参阅:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ExpressionPlaceholders.html)

最佳答案

是的,扫描表格中的“Booze”并计算结果中的项目应该可以得到总数。请注意,您需要进行递归扫描,直到 LastEvaluatedKey 为 null。

引用exclusive start key也是如此。

Scan

编辑:-

是的,代码看起来不错。需要注意的一件事是,结果集并不总是包含 100 个项目。请引用下面的 LIMIT 定义(与 SQL 数据库不同)。

Limit — (Integer) The maximum number of items to evaluate (not necessarily the number of matching items). If DynamoDB processes the number of items up to the limit while processing the results, it stops the operation and returns the matching values up to that point, and a key in LastEvaluatedKey to apply in a subsequent operation, so that you can pick up where you left off. Also, if the processed data set size exceeds 1 MB before DynamoDB reaches this limit, it stops the operation and returns the matching values up to the limit, and a key in LastEvaluatedKey to apply in a subsequent operation to continue the operation. For more information, see Query and Scan in the Amazon DynamoDB Developer Guide.

关于python - Python 中的 DynamoDB 查询(使用 GroupBy 进行计数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41780500/

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