我的用例需要从spark map函数内部访问存储在HDFS中的文件。这个用例使用不向map函数提供任何数据的自定义输入格式,而map函数获取输入拆分并访问数据。我使用以下代码执行此操作
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)
乍一看,这似乎是一个与火花罐有关的小错误,但无法破解。任何帮助将不胜感激。
答案 0 :(得分:0)
事实证明,在我开展这项工作的过程中,这是我的错误。我使用的命令没有适当的选项。因此,这个问题。我正在使用下面的命令
spark-submit --class org.myclass --jars myjar spark://myhost:7077 myjob.jar
以下是正确的
spark-submit --class org.myclass --jars myjar --master spark://myhost:7077 myjob.jar
这是一个小错误但不知何故我错过了它。现在它正在运作