gpt4 book ai didi

python - 使用 MapReduce 是否可以保证具有相同键的所有值都将进入相同的 reducer?

转载 作者:可可西里 更新时间:2023-11-01 15:05:45 25 4
gpt4 key购买 nike

我有一个正在处理的 MapReduce 项目(具体来说,我正在使用 Python 和库 MrJob 并计划使用 Amazon 的 EMR 运行)。这是总结我遇到的问题的示例:

我有数千 GB 的 json 文件,里面装满了客户数据。我需要去运行每个客户 json 行/输入/对象的每日、每周和每月报告。

所以对于我目前做的 map 步骤:

map_step(_, customer_json_object)
c_uuid = customer_json_object.uuid
if customer_json_object.time is in daily_time_range:
yield "%s-%s" % (DAILY_CONSTANT, c_uuid), customer_json_object
if customer_json_object.time is in weekly_time_range:
yield "%s-%s" % (WEEKLY_CONSTANT, c_uuid), customer_json_object
if customer_json_object.time is in monthly_time_range:
yield "%s-%s" % (MONTHLY_CONSTANT, c_uuid), customer_json_object

然后是reducer

reducer_step(key, customer_info)
report_type, c_uuid = key.split("-")
yield None, Create_Report(report_type, customer_info)

我的问题是:

我是否可以保证所有具有相同键的数据(这里指的是特定客户和特定报告类型的所有数据)都将由同一个 reducer 处理?我的 Create_Report 不能分布在多个进程中,因此我需要一个进程处理报告所需的所有数据。

我担心如果一个键的值太多,那么它们可能会分散在 reducer 或其他东西中。然而,从我读到的内容来看,这听起来像是它的工作原理。

非常感谢!!我刚刚意识到我需要在 map 步骤中多次 yield,所以这是我的最后一 block 拼图。如果这能被弄清楚,那将是一个巨大的胜利,因为我无法在垂直方向上进一步扩展我的小服务器......

如果从上面的代码中看不清楚,我有数千个客户(或真正的用户,没有人付钱给我)数据的 json 行文件。我希望能够为这些数据创建报告,并且报告代码的生成方式不同,具体取决于每月、每周或每天。实际上,在此之前我也在对数据进行重复数据删除,但这是我的最后一步,实际生成输出。非常感谢您花时间阅读本文并提供帮助!!

最佳答案

在一般的 MapReduce 和 Phyton 库 MrJob 中,它适用于:

A reducer takes a key and the complete set of values for that key in the current step, and returns zero or more arbitrary (key, value) pairs as output.

来自 MrJob 文档 - https://pythonhosted.org/mrjob/guides/concepts.html#mapreduce-and-apache-hadoop

回到你的问题:

Am I guaranteed here that all my data with the same key ... will be handled by the same reducer?

是的,此外,属于同一个键的所有值都被传递给你的 reducer 的同一个调用。

关于python - 使用 MapReduce 是否可以保证具有相同键的所有值都将进入相同的 reducer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28556250/

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