gpt4 book ai didi

hive - HIVE 中的 DISTRIBUTE BY 子句

转载 作者:行者123 更新时间:2023-12-04 11:20:27 24 4
gpt4 key购买 nike

我无法理解这是什么DISTRIBUTE BY条款在 hive .我知道这样的定义,如果我们有 DISTRIBUTE BY (city) ,这会将每个城市发送到不同的 reducer 但我没有得到同样的。让我们考虑如下数据:
假设我们有一个名为 data 的表,其中包含 username 和 amount 列:

+----------+--------+
| username | amount |
+----------+--------+
| user_1 | 25 |
+----------+--------+
| user_1 | 53 |
+----------+--------+
| user_1 | 28 |
+----------+--------+
| user_1 | 50 |
+----------+--------+
| user_2 | 20 |
+----------+--------+
| user_2 | 50 |
+----------+--------+
| user_2 | 10 |
+----------+--------+
| user_2 | 5 |
+----------+--------+
现在如果我说——
SELECT username, SUM(amount) FROM data DISTRIBUTE BY (username)
这不应该运行 2 个单独的 reducer 吗?它仍在运行单个 reducer ,我不知道为什么。我认为这可能与 有关聚类成桶 分区但是我尝试了所有方法,它仍然运行一个 reducer 。谁能解释为什么?

最佳答案

唯一DISTRIBUTE BY (city)说的是相同的记录city将转到同一个 reducer 。没有别的。

Hive uses the columns in Distribute By to distribute the rows among reducers. All rows with the same Distribute By columns will go to the same reducer



https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy

OP的一个问题:

Then what is the point of this DISTRIBUTE BY ? There's no guarantee that each (city) would go to a different reducer then why use it ?



原因有二:
  • hive开头DISTRIBUTE BY , SORT BYCLUSTER BY用于以今天自动完成的方式处理数据的地方(例如分析函数 https://oren.lederman.name/?p=32)
  • 您可能希望通过脚本(Hive“转换”)流式传输数据,并且希望脚本按特定组和顺序处理数据。为此,您可以使用 DISTRIBUTE BY + SORT BYCLUSTER BY .与 DISTRIBUTE BY保证您将整个组放在同一个 reducer 中。与 SORT BY你会连续得到一个组的所有记录。
  • 关于hive - HIVE 中的 DISTRIBUTE BY 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42234002/

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