Hadoop中的自定义分区器
我有一些数据是由ids在0到2亿的范围内键入的,我需要将其拆分为0-5mil、5mil-10mil等范围的美元 我试图在Hadoop上使用一个自定义分区器来完成最后一部分,这样代码的最后一部分看起来像这样:Hadoop中的自定义分区器,hadoop,apache-pig,hadoop-partitioning,Hadoop,Apache Pig,Hadoop Partitioning,我有一些数据是由ids在0到2亿的范围内键入的,我需要将其拆分为0-5mil、5mil-10mil等范围的美元 我试图在Hadoop上使用一个自定义分区器来完成最后一部分,这样代码的最后一部分看起来像这样: Conns = FOREACH ConnsGrouped GENERATE group as memberId, $1.companyId as companyIds; ConnsPartitioned = DISTINCT Conns PARTITION BY com.mypackage.
Conns = FOREACH ConnsGrouped GENERATE group as memberId, $1.companyId as companyIds;
ConnsPartitioned = DISTINCT Conns PARTITION BY com.mypackage.SearchNodePartitioner PARALLEL 50;
rmf $connections_file
Store ConnsPartitioned INTO 'test' using AvroStorage(...);
我的分区器如下所示:
public class SearchNodePartitioner<Long, V> implements Partitioner<Long, V>
{
@Override
public void configure(JobConf conf)
{
// Nothing
}
@Override
public int getPartition(Long key, V value, int numPartitions)
{
return new Double(Math.floor(key / (5.0 * Math.pow(10, 6)))).intValue() % numPartitions;
}
}
公共类SearchNodePartitioner实现分区器
{
@凌驾
公共void配置(JobConf conf)
{
//没什么
}
@凌驾
公共int getPartition(长键、V值、int numPartitions)
{
返回新的Double(Math.floor(key/(5.0*Math.pow(10,6))).intValue()%numPartitions;
}
}
但它似乎一点也没有被调用。即使我将返回行替换为
return 1代码>文件间的数据似乎是以默认行为散列分布的。一种方法是:
A = LOAD ............
SPLIT A INTO B IF <your range condition> , C IF < your range condition>
STORE B ...
STORE C ...
A=负载。。。。。。。。。。。。
如果<你的射程条件>
商店B。。。
商店C。。。
或者您可以尝试以下方法:
B = FILTER A BY $1 >= <lower_Range> AND $1 <= <upper_Range>;
B=按$1>=和$1筛选A可以这样做的一种方法是:
A = LOAD ............
SPLIT A INTO B IF <your range condition> , C IF < your range condition>
STORE B ...
STORE C ...
A=负载。。。。。。。。。。。。
如果<你的射程条件>
商店B。。。
商店C。。。
或者您可以尝试以下方法:
B = FILTER A BY $1 >= <lower_Range> AND $1 <= <upper_Range>;
B=FILTER A BY$1>=和$1DISTINCT+custom partitioner的答案是:你不能再这样做了(我刚刚发现)。DISTINCT现在使用优化的特殊分区器
见:
解决办法:
A=//某个元组
B=按自定义字段分区的A组
使用….将B存储到“foo”中
后来:
B=使用……加载“foo”
A=每个B生成展平($1) DISTINCT+custom partitioner的答案是:你不能再这样做了(我刚刚发现)。DISTINCT现在使用优化的特殊分区器
见:
解决办法:
A=//某个元组
B=按自定义字段分区的A组
使用….将B存储到“foo”中
后来:
B=使用……加载“foo”
A=每个B生成展平($1) 只是好奇你为什么要这样处理这个问题。如果您想根据范围分割数据,我相信Pig有内置的命令来帮助您做到这一点。如果你想使用自定义分区器,通过MapReduce而不是Pig来实现不是更容易吗?呃,我不知道第一个问题有什么命令。至于第二个问题,我正在考虑,尽管学习MapReduce可能会大大推迟我的项目。请查看我的答案,了解可以帮助您实现这一点的Pig命令。我只是好奇您为什么要这样处理这个问题。如果您想根据范围分割数据,我相信Pig有内置的命令来帮助您做到这一点。如果你想使用自定义分区器,通过MapReduce而不是Pig来实现不是更容易吗?呃,我不知道第一个问题有什么命令。至于第二个问题,我正在考虑,尽管学习MapReduce可能会大大推迟我的项目。请查看我的答案,了解可以帮助您实现这一点的Pig命令。是的,伙计,我昨天刚刚在邮件列表中看到了这一点,哈哈。谢谢你的回答。是的,哥们,我昨天刚在邮件列表上看到了,哈哈。谢谢你的回答。