gpt4 book ai didi

java - 从 MapReduce 获取特定数据

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

我将以下文件作为输入,其中包含 10000 行,如下所示

250788965731,20090906,200937,200909,621,SUNDAY,WEEKEND,ON-NET,MORNING,OUTGOING,VOICE,25078,PAY_AS_YOU_GO_PER_SECOND_PSB,SUCCESSFUL-RELEASEDBYSERVICE,5,0,1,6.25,635-10-104-40163. 

如果第 18 列小于 10 并且第 9 列是早上,我必须打印第一列。我做了以下代码。我没有得到输出。输出文件为空。

public static class MyMap extends Mapper<LongWritable, Text, Text, DoubleWritable> {


public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
String[] day=line.split(",");
double day1=Double.parseDouble(day[17]);
if(day[8]=="MORNING" && day1<10.0)
{
context.write(new Text(day[0]),new DoubleWritable(day1));
}
}
}
public static class MyReduce extends Reducer<Text, DoubleWritable, Text,DoubleWritable> {

public void reduce(Text key, Iterator<DoubleWritable> values, Context context)
throws IOException, InterruptedException {

String no=values.toString();
double no1=Double.parseDouble(no);
if(no1>10.0)
{
context.write(key,new DoubleWritable(no1) );
}

}
}

请告诉我我做错了什么?流程是否正确?

最佳答案

我可以看到一些问题。

首先,在您的 Mapper 中, 你应该使用 .equals()而不是 ==比较 String 时秒。否则你只是在比较引用,即使 String 比较也会失败。对象内容是一样的。由于 Java String 实习,它有可能成功,但如果这是最初的意图,我会避免过多依赖它。

在你的Reducer ,我不确定你想要达到什么目的,但无论如何我都能发现一些错误的东西。输入键是 Iterable<DoubleWritable> ,所以你应该迭代它并对每个单独的值应用你需要的任何条件。这是我将如何重写你的 Reducer :

public static class MyReduce extends Reducer<Text, DoubleWritable, Text,DoubleWritable> {

public void reduce(Text key, Iterator<DoubleWritable> values, Context context)
throws IOException, InterruptedException {

for (DoubleWritable val : values) {
if (val.get() > 10.0) {
context.write(key, val);
}
}
}
}

但是整体逻辑没有太大意义。如果您只想在第 18 列小于 10 且第 9 列为 MORNING 时打印第一列, 那么你可以使用 NullWritable作为映射器的输出键,并写入第 1 列 day[0]作为你的输出值。你可能甚至不需要 Reducer在这种情况下,您可以用 job.setNumReduceTasks(0); 告诉 Hadoop .

有一件事让我开始思考,如果您的输入只有 10k 行,您真的需要 Hadoop 作业吗?在我看来,一个简单的 shell 脚本(例如 awk)对于这个小数据集就足够了。

希望对您有所帮助!

关于java - 从 MapReduce 获取特定数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14294711/

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