相关疑难解决方法(0)

读取文件作为hadoop中的单个记录

我有很大的不.对于小文件,我想使用CombineFileInputFormat合并文件,以便每个文件数据作为我的MR作业中的单个记录.我已经关注了http://yaseminavcular.blogspot.in/2011/03/many-small-input-files.html并尝试将其转换为新的api

我面临两个问题:

a)我只是用2个小文件测试它,仍然有2个映射器被激活.我期待1

b)每一行都是单个记录,我希望整个文件作为单个记录.

这可能会很痛苦,但请查看下面的代码.我在hadoop中仍然很天真

司机班

public class MRDriver  extends Configured implements Tool {


@Override
public int run(String[] args) throws Exception {
    FileSystem fs = new Path(".").getFileSystem(getConf());
    fs.printStatistics();
    Job job = new Job(getConf());
    job.setJobName("Enron MR");
    job.setMapperClass(EnronMailReadMapper.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    job.setNumReduceTasks(0);
    job.setJarByClass(EnronMailReadMapper.class);
    RawCombineFileInputFormat.addInputPath(job, new Path(args[0]));
    job.setOutputFormatClass(TextOutputFormat.class);
    TextOutputFormat.setOutputPath(job, new Path(args[1]));
    return job.waitForCompletion(true) ? 0 :1;  
}

public static void main(String[] args) throws Exception  {
    int exitCode = ToolRunner.run(new MRDriver(), args);
    System.exit(exitCode);
}
Run Code Online (Sandbox Code Playgroud)

}

下面的类主要是LineRecordReader的复制粘贴,修改了initialize()和nextKeyValue()函数

public class SingleFileRecordReader extends RecordReader<LongWritable, Text> { …
Run Code Online (Sandbox Code Playgroud)

java hadoop mapreduce

11
推荐指数
1
解决办法
8136
查看次数

分区数如何影响`wholeTextFiles`和`textFiles`?

在火花中,我理解如何使用wholeTextFilestextFiles,但我不知道何时使用.这是我目前所知道的:

  • 处理不是按行分割的文件时,应该使用wholeTextFiles,否则使用textFiles.

我会在默认情况下,想wholeTextFilestextFiles按文件内容的分区,并通过线,分别.但是,它们都允许您更改参数minPartitions.

那么,更改分区如何影响这些处理的方式呢?

例如,假设我有一个包含100行的非常大的文件.处理它wholeTextFiles与100个parti 之间的区别,并textFile使用默认的parition 100将其处理为(逐行分区).

这些有什么区别?

python apache-spark pyspark

5
推荐指数
1
解决办法
2178
查看次数

标签 统计

apache-spark ×1

hadoop ×1

java ×1

mapreduce ×1

pyspark ×1

python ×1