- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我试图了解 MapReduce
中的分区
,我了解到 Hadoop 有一个默认的分区程序,称为 HashPartitioner
,分区程序有助于在决定给定键将转到哪个 reducer 时。
hashcode(key) % NumberOfReducers, where `key` is the key in <key,value> pair.
HashPartitioner
如何计算 key 的哈希码?是简单地调用 key 的 hashCode() 还是此 HashPartitioner
使用一些其他逻辑来计算 key 的哈希码?
谁能帮我理解一下?
最佳答案
默认的分区器简单地使用键的hashcode()
方法并计算分区。这使您有机会实现 hascode()
来调整键的分区方式。
来自javadoc :
public int getPartition(K key,
V value,
int numReduceTasks)
Use Object.hashCode() to partition.
对于实际代码,它只是返回 (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks
:
public int More ...getPartition(K key, V value,
int numReduceTasks) {
return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}
编辑:添加自定义分区程序的详细信息
您可以为分区程序添加不同的逻辑,甚至可能根本不使用 hashcode()
。
自定义分区器可以通过扩展Partitioner
public class CustomPartitioner extends Partitioner<Text, Text>
一个这样的例子,它作用于自定义键对象的属性:
public static class CustomPartitioner extends Partitioner<Text, Text>{
@Override
public int getPartition(Text key, Text value, int numReduceTasks){
String emp_dept = key.getDepartment();
if(numReduceTasks == 0){
return 0;
}
if(key.equals(new Text(“IT”))){
return 0;
}else if(key.equals(new Text(“Admin”))){
return 1 % numReduceTasks;
}else{
return 2 % numReduceTasks;
}
}
关于Hadoop 的默认分区器 : HashPartitioner - How it calculates hash-code of a key?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49180132/
我阅读了 HashPartitioner 的文档。不幸的是,除了 API 调用之外,没有任何解释。我假设 HashPartitioner 根据键的哈希对分布式集进行分区。例如,如果我的数据类似于 (1
我阅读了 HashPartitioner 的文档.不幸的是,除了 API 调用之外,没有太多解释。我假设 HashPartitioner 根据键的散列对分布式集进行分区。例如,如果我的数据是这样的 (
所以,我有如下数据, [ (1, data1), (1, data2), (2, data3), (1, data4), (2, data5) ] 我想将其转换为以下内容,以进行进一步处理。 [ (1
我有一个包含超过 20GB json 结构元数据的大型 json 文件。它包含跨某些应用程序的简单用户元数据,我想筛选它以检测重复项。以下是数据的示例: {"created": "2015-08-04
我试图了解 MapReduce 中的分区,我了解到 Hadoop 有一个默认的分区程序,称为 HashPartitioner,分区程序有助于在决定给定键将转到哪个 reducer 时。 从概念上讲,它
我是一名优秀的程序员,十分优秀!