Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop中的自定义分区器_Hadoop_Apache Pig_Hadoop Partitioning - Fatal编程技术网

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.

我有一些数据是由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.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命令。是的,伙计,我昨天刚刚在邮件列表中看到了这一点,哈哈。谢谢你的回答。是的,哥们,我昨天刚在邮件列表上看到了,哈哈。谢谢你的回答。