如何以字节数组格式读取多个文件作为spark作业中的输入流?
Path pt = new Path(umfPaths);
FileSystem fs = FileSystem.get(jsc.hadoopConfiguration());
fs.open(pt);
..原因是我有输入文件,其内容是字节格式。然后将输入文件拆分为多个文件,块长度为64 MB,并存储在HDFS中。我必须使用Apache spark并行处理文件。 req是将整个64MB的块作为单个文件读取并处理它。通过编写自定义记录阅读器或使用FileSystem API(使用InputStream)读取每个文件来进行处理是否有效?
答案 0 :(得分:0)
我在SparkContext,newHadoopApiFile中使用API解决了这个问题。 我编写了一个CustomInputFormat类,它将执行InputFormat操作并将返回一个POJO对象。
JavaPairRDD> baseRDD = sc.newAPIHadoopFile(args [2],InputFormat.class,NullWritable.class, ArrayList.class,conf);
然后忽略Key,只创建一个RDD值。
JavaRDD> mapLines1 = baseRDD.values();
然后做了上述RDD的FlatMap。
在InputFormat类中,我扩展了FileInputFormat,并将isSplittable覆盖为false,以便作为单个文件读取。
public class InputFormat extends FileInputFormat { public RecordReader<NullWritable, ArrayList<Record>> createRecordReader(InputSplit split, TaskAttemptContext context) throws IOException, InterruptedException{ //Logic Goes here } @Override protected boolean isSplitable(JobContext context, Path file) { return false; } }