- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个基于文本的输入文件,大小约为25 GB。在该文件中,一条记录由 4 行组成。每条记录 的处理都是相同的。但是在每条记录中,四行中的每一行都以不同的方式处理。
我是 Hadoop 的新手,所以我想要一个指导,在这种情况下是使用 NLineInputFormat
还是使用默认的 TextInputFormat
?提前致谢!
最佳答案
假设您有以下格式的文本文件:
2015-8-02
error2014 blahblahblahblah
2015-8-02
blahblahbalh error2014
你可以使用 NLineInputFormat .
使用 NLineInputFormat
功能,您可以准确指定应将多少行发送到映射器。
在您的情况下,您可以使用每个映射器输入 4 行。
编辑:
下面是一个使用 NLineInputFormat 的例子:
映射器类:
import java.io.IOException;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
public class MapperNLine extends Mapper<LongWritable, Text, LongWritable, Text> {
@Override
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
context.write(key, value);
}
}
驱动类:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.NLineInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.LazyOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
public class Driver extends Configured implements Tool {
@Override
public int run(String[] args) throws Exception {
if (args.length != 2) {
System.out
.printf("Two parameters are required for DriverNLineInputFormat- <input dir> <output dir>\n");
return -1;
}
Job job = new Job(getConf());
job.setJobName("NLineInputFormat example");
job.setJarByClass(Driver.class);
job.setInputFormatClass(NLineInputFormat.class);
NLineInputFormat.addInputPath(job, new Path(args[0]));
job.getConfiguration().setInt("mapreduce.input.lineinputformat.linespermap", 4);
LazyOutputFormat.setOutputFormatClass(job, TextOutputFormat.class);
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.setMapperClass(MapperNLine.class);
job.setNumReduceTasks(0);
boolean success = job.waitForCompletion(true);
return success ? 0 : 1;
}
public static void main(String[] args) throws Exception {
int exitCode = ToolRunner.run(new Configuration(), new Driver(), args);
System.exit(exitCode);
}
}
关于java - 何时在 Hadoop Map-Reduce 中使用 NLineInputFormat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28871899/
我使用的是 Hadoop 0.20.2,并且使用的是旧 API。我正在尝试将数据 block 发送到映射器,而不是一次发送一行(数据涵盖多行)。我尝试使用 NLineInputFormat 来设置一次
$ cat abook.txt | base64 –w 0 >onelinetext.b64 $ hadoop fs –put onelinetext.b64 /input/onelinetext.b
我已经为我们的映射器编写了自定义 Recordreader,以便一次从源文件接收 3 条记录(3 行),而不是 TextInputFormat 默认提供的 1 行。以下是示例代码片段。 扩展 Text
我想要的基本上是让每个数据元素由 10 行组成。但是,使用以下代码,每个元素仍然是一行。我在这里犯了什么错误? val conf = new SparkConf().setAppName("MyApp
我正在尝试读取映射器中的多行。为此,我开始使用 NLineInputFormat 类。使用它时,我收到 GC 限制错误。作为引用,错误代码是: 16/02/21 01:37:13 INFO mapre
我试图限制每个映射器获得的行数。我的代码是这样的: package com.iathao.mapreduce; import java.io.IOException; impo
我有一个基于文本的输入文件,大小约为25 GB。在该文件中,一条记录由 4 行组成。每条记录 的处理都是相同的。但是在每条记录中,四行中的每一行都以不同的方式处理。 我是 Hadoop 的新手,所以我
如果是,HDFS 如何将输入文件拆分为 N 行以供每个映射器读取? 我相信这是不可能的! 当拆分器需要偏移量或字节进行拆分时,可以在不处理整个输入文件的情况下进行拆分。 但是当 '\n' 或换行符的数
我是一名优秀的程序员,十分优秀!