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 需要帮助来解决此mapreduce代码吗_Hadoop_Mapreduce_Apache Pig - Fatal编程技术网

Hadoop 需要帮助来解决此mapreduce代码吗

Hadoop 需要帮助来解决此mapreduce代码吗,hadoop,mapreduce,apache-pig,Hadoop,Mapreduce,Apache Pig,需要类似的输出-如果客户购买了p1,则应将标志设为1,否则应将标志设为0。有数以百万计的客户和数以百万计的产品下面是所需的输出。非常感谢您在这方面的任何帮助 Below is the data c1 p1 q1 d1 c2 p2 q2 d2 您只需使用mapside逻辑即可实现,示例代码供您参考: c1 p1 q1 d1 1 c1 p2 q1 d1 0 c2 p2 q2 d2 1 c2 p1 q2 d2 0 p

需要类似的输出-如果客户购买了p1,则应将
标志设为1
,否则应将
标志设为0
。有数以百万计的客户和数以百万计的产品下面是所需的输出。非常感谢您在这方面的任何帮助

Below is the data

c1         p1      q1      d1

c2         p2      q2      d2

您只需使用mapside逻辑即可实现,示例代码供您参考:

c1 p1 q1 d1 1

c1 p2 q1 d1 0

c2 p2 q2 d2 1

c2 p1 q2 d2 0
public void映射(可长写键、文本值、上下文)
抛出IOException、InterruptedException{
字符串行=value.toString();
NullWritable值=NullWritable.get();
字符串标记[]=行。拆分(“”);
if(令牌[1]=“p1”){
行=行+++“1”;
}else if(令牌[1]=“p2”){
行=行+“”+“0”;
}
context.write(新文本(行),值);
}

谢谢您的帮助。但这里不仅仅是p1和p2,它只是一个例子。它拥有数以百万计的产品和数以百万计的客户。当然@Som7我愿意提供帮助。您能否详细说明问题陈述,我的意思是,您希望如何处理两个以上产品的标志状态,它是否仍然是二进制(1或0)或任何其他约束?根据问题陈述,我们可以在MR中讨论并选择适当的设计模式,并着手实施解决方案。谢谢Addy。我想获得。所有客户购买的产品(c1)标记为1,产品未购买标记为0。例如,客户(c1)购买了产品p1、p2、p4、p10、p11。。。。。这应该是标志1。且不购买产品p3、p5、p6、p7应标记为0。我认为方法应该是首先识别所有产品。然后检查客户购买的产品并相应地标记。希望它是清楚的。在Som7中进行了一半。但还有更多的澄清。您决定客户是否购买产品的一个因素(列)。据我所知,您可以在mapper中将客户详细信息映射为KV pair As(c1,)和reducer中,收集每个客户购买的产品组,迭代该列表并在reducer中实现您的逻辑,然后使用conext进行回写。使用所需输出写入(K,V)。在reducer中实现业务逻辑并不是那么可取,但在您的情况下应该可以。
public void map(LongWritable key, Text value, Context context)
        throws IOException, InterruptedException {
    String line = value.toString();
    NullWritable value = NullWritable.get();
    String tokens[] = line.split("<your delim>");
    if (tokens[1] == "p1") {
        line = line + "<your delim>" + "1";
    } else if (tokens[1] == "p2") {
        line = line + "<your delim>" + "0";
    }
    context.write(newText(line), value);
}