Java K1&;制图器中的K2<;K1、V1、K2、V2>;在字数方面?
我在系统中配置了Hadoop(Java K1&;制图器中的K2<;K1、V1、K2、V2>;在字数方面?,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我在系统中配置了Hadoop(Hadoop-2.0.5-alpha)。我能够运行单词计数示例。但我无法理解longwritebale(作为map方法的第一个参数)的用途,如果我想做其他事情而不是字数计算(即不读取文件),那么我可以在这里传递什么 (场景是:我想计算一个HDFS目录中保存了多少文件)?LongWritable这里是从用于运行作业的inputformat中获取的密钥。默认情况下,使用文本输入格式,将文件中的位置作为键返回,将行作为值返回 您必须研究inputformats,以了解如果
Hadoop-2.0.5-alpha
)。我能够运行单词计数示例。但我无法理解longwritebale
(作为map方法的第一个参数)的用途,如果我想做其他事情而不是字数计算(即不读取文件),那么我可以在这里传递什么
(场景是:我想计算一个HDFS目录中保存了多少文件)?LongWritable这里是从用于运行作业的inputformat中获取的密钥。默认情况下,使用文本输入格式,将文件中的位置作为键返回,将行作为值返回
您必须研究inputformats,以了解如果您的输入不是文件,它可能是什么。首先,我建议您浏览一些关于MapReduce的好文章、书籍等。或者至少试试谷歌搜索一下。你的问题表明你没有做任何研究,只是把问题贴在这里。你有吗 因为你是新来的,这是第一次,我会尝试回答你的问题。但请以后尽量避免这种情况 回到您的问题,longwritebale,intwritebale等是MapReduce类型,就像Java或任何其他语言中的int、long等。它在map方法中的用法与在任何普通方法或函数中使用数据类型的用法相同,以说明该方法中使用的变量的类型。如果不指定变量,您如何知道它的类型?简而言之,它代表K1的类型 如果我想做其他事情而不是计算字数(即不读取文件),那么我可以在这里传递什么信息。 您可以将任何MR类型或自定义类型(必须实现可写和可比较)作为键的类型传递。你说不读取文件是什么意思 一旦你在一个文件/目录上启动了一个MR作业,你就已经可以访问诸如文件名、文件路径等内容了。只是你应该知道如何使用它 附录: 刚才看到你在下面的评论。如果不想对文件内容做任何操作,则不必担心输入键/值,即K1,V1。不要触摸K1和V1。您应该担心的是输出键/值,即K2,V2。如果只想从映射器中发出文件的路径和名称,可以执行以下操作:
FileSplit fileSplit = (FileSplit)context.getInputSplit();
String fileName = fileSplit.getPath().getName();
String filePath = fileSplit.getPath().to String();
然后从你的映射器中发出这个。您的map()将如下所示:
public static class Your_Mapper extends
Mapper<LongWritable, Text, Text, Text> {
Text path = new Text();
Text name = new Text();
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
FileSplit fileSplit = (FileSplit)context.getInputSplit();
String fileName = fileSplit.getPath().getName();
String filePath = fileSplit.getPath().to String();
name.set(fileName);
path.set(filePath);
context.write(name, path);
}
}
public静态类\u映射器扩展
制图员{
文本路径=新文本();
文本名称=新文本();
公共void映射(可长写键、文本值、上下文)
抛出IOException、InterruptedException{
FileSplit FileSplit=(FileSplit)context.getInputSplit();
字符串文件名=fileSplit.getPath().getName();
String filePath=fileSplit.getPath().to String();
name.set(文件名);
set(filePath);
write(名称、路径);
}
}
因为当我试图解决问题时,我只需要路径和文件(在其中),但它仍在读取文件内容。我如何避免它?“不读取文件”意味着每当我运行mapreduce时,它都在读取给定路径中存在的文件内容,这是我不想做的。键(LongWritable)是作为行的偏移量出现的,所以控件在映射器中出现的行数与文件中存在的行数一样多。这样,它会多次写入相同的记录。不要对K1和V1执行任何操作。你无法避免这些事情的产生。先生就是这样工作的。如果你不想使用它,你可以跳过它。是的,我没有用K1和V1做任何事情,但是我怎么能跳过它?跳过什么?你不能改变它的工作方式。如果你想跳过它,就不要碰它。