hadoop中用于搜索的mapper程序说明
我是hadoop新手,所以我在理解程序方面有点困难。那么,如果有人能帮助我理解这个映射程序hadoop中用于搜索的mapper程序说明,hadoop,Hadoop,我是hadoop新手,所以我在理解程序方面有点困难。那么,如果有人能帮助我理解这个映射程序 package SearchTxn; import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Map
package SearchTxn;
import java.io.IOException;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
public class MyMap extends Mapper<LongWritable, Text, NullWritable, Text>{
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String Txn = value.toString();
String TxnParts[] = Txn.split(",");
Double Amt = Double.parseDouble(TxnParts[3]);
String Uid = TxnParts[2];
if(Uid.equals("4000010") && Amt>100)
{
context.write(null, value);
}
}
}
包搜索txn;
导入java.io.IOException;
导入org.apache.hadoop.io.LongWritable;
导入org.apache.hadoop.io.NullWritable;
导入org.apache.hadoop.io.Text;
导入org.apache.hadoop.mapreduce.Mapper;
公共类MyMap扩展映射器{
公共void映射(LongWritable键、文本值、上下文上下文)引发IOException、InterruptedException{
字符串Txn=value.toString();
字符串txnpart[]=Txn.split(“,”);
Double Amt=Double.parseDouble(txnpart[3]);
字符串Uid=txnpart[2];
如果(Uid等于(“4000010”)&金额>100)
{
write(null,value);
}
}
}
该代码基本上过滤Uid
(csv中的第二列)为“4000010”且Amt
(我猜对于金额,csv中的第三列)大于100的行 连同@Thomas Jungblut的答案,在你们程序的下面一行是关于Mapper类整体输入和输出的。这里没有任何内容作为键
重新调谐,而是将文本作为值
重新调谐
public class MyMap extends Mapper<LongWritable, Text, NullWritable, Text>{
从Mapper类编写序列化键并不总是必要的。根据您的用例,键或值或两者都可以写入
上下文。write
方法。但是上下文的含义是什么。write(null,value);?因为当我们进行字数计算时,我们将IntWritable one=new IntWritable(1)Text outkey=new Text(word)稍后执行上下文。out(outkey,value),但在上面的代码中,我没有得到输出行(即上下文行)中发生的情况。@Kuldeepsing所以你应该在你的问题中包括这一点。当您使用TextOutputFormat
时,将null
写入为键会使格式只写入值,而没有键/值分隔符。这意味着我们将键视为null,将整行视为值?您的理解是正确的。不确定您的用例,但是如果您提取了一些不值钱的东西。然后你应该把它们从mapper发送出去。这里的值是经过验证后的进位转发。是的,这是一个用于搜索具有某些id和金额的特定记录的程序。该结果将输入减速器。所以,这里我们把key作为null,把一整行或者说row作为value?继续吧,如果你认为这个答案已经解决了或者正确地回答了你的问题。请单击答案旁边的复选标记,将其标记为已接受。见:?了解更多信息。
context.write(null, value);