gpt4 book ai didi

Hadoop排序输入顺序

转载 作者:可可西里 更新时间:2023-11-01 14:59:38 30 4
gpt4 key购买 nike

如果我的工作的输入是文件集 [a, b, c, d],那么输入是严格排序的 [map(a.0), map(a.1), map(b.0) , map (b.1), map (c.0), map (c.1), map (d.0), map (d.1)]?

我的动机是拥有一系列文件(当然会被分解成 block ),其行是 [key, value];其中每个键和值都是一个简单的字符串。尽管没有明确的顺序定义字段,但我希望按照它们在输入中出现的顺序在每个键的 reducer 中将这些值连接在一起。

非常感谢任何建议;事实证明,这对 Google 来说是一个困难的查询。

例子

输入格式

A First
A Another
A Third
B First
C First
C Another

期望的输出

A First,Another,Third
B First
C First,Another

重申一下,鉴于文件存储在不同的 block 中,我不确定我是否可以依靠正确的顺序获取 First-Third。

最佳答案

不,您无法保证使用 Hadoop 中的标准数据流(即标准排序器、分区器、分组器),值将按该顺序排列。唯一可以保证的是键的顺序(A、B、C)。

为了实现您想要的,您必须编写自己的排序器并将值(第一、第二、第三)包含在键中 => 新键将是:

  "A First"
"A Second"
...

但是,这种情况下的问题是这些键最终会出现在不同的分区中(标准哈希分区器很可能会将“A first”分配给一个分区,而“A second”分配给另一个分区)所以,避免这个问题你还应该插入你自己的分区器,它将只使用 key 的第一部分(即 A)来进行分区。您还应该定义石斑鱼,否则“A first”、“A second”将不会一起传递到同一个 reduce 调用。

所以你的 map 函数的输出应该是:

 "A First"    First
"A Second" Second
...

换句话说,映射器输出的值应该保持原样。否则您将无法获取 reducer 中的值。

关于Hadoop排序输入顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11468482/

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