В моем случае использования требуется доступ к файлу, хранящемуся в HDFS, из функции искры. В используемом случае используется пользовательский формат ввода, который не предоставляет никаких данных для функции карты, тогда как функция карты получает входной распад и доступ к данным. Я использую следующий код, чтобы сделать этоПроблема при доступе к файлу HDFS внутри функции искроберической карты
val hConf: Configuration = sc.hadoopConfiguration
hConf.set("fs.hdfs.impl", classOf[org.apache.hadoop.hdfs.DistributedFileSystem].getName)
hConf.set("fs.file.impl", classOf[org.apache.hadoop.fs.LocalFileSystem].getName)
var job = new Job(hConf)
FileInputFormat.setInputPaths(job,new Path("hdfs:///user/bala/MyBinaryFile"));
var hRDD = new NewHadoopRDD(sc, classOf[RandomAccessInputFormat],
classOf[IntWritable],
classOf[BytesWritable],
job.getConfiguration()
)
val count = hRDD.mapPartitionsWithInputSplit{ (split, iter) => myfuncPart(split, iter)}.collect()
В настоящее время, я ничего внутри myfuncPart не делаю. Эта простая возвращает карту, как показано ниже
iter.map { tpl ⇒ (tpl._1, tpl._2.getCapacity) }
Когда я представить работу вместе с зависимостями, я получаю ошибку ниже
15/10/30 11:11:39 WARN scheduler.TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, 40.221.94.235): java.io.IOException: No FileSystem for scheme: spark
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2584)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2591)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:91)
На первый взгляд, кажется, небольшая ошибка, связанные с искру банки, но не мог взломать. Любая помощь будет оценена.